Проблема XSLT-новичка: мне нужно подставить текстовое значение в XML-файл. Все остальные узлы необходимо оставить без изменений. Вот мой входной файл (in.xml):
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<level1 attr1 = "val1">
<level2>in</level2>
</level1>
</root>
Вот мое XSLT-преобразование (subst.xsl):
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match = "//node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match = "/root/level1/level2/text()">out</xsl:template>
</xsl:stylesheet>
Я запускаю его со следующим Ant-скриптом (build.xml):
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "test" default = "test" basedir = ".">
<target name = "test">
<xslt style = "subst.xsl" in = "in.xml" out = "out.xml" />
</target>
</project>
И вот что я получаю (out.xml):
<?xml version = "1.0" encoding = "UTF-8"?><root>
<level1>
<level2>out</level2>
</level1>
</root>
Атрибут attr1 для level1 отсутствует.
Буду очень признателен, если кто
ИЛИ ЖЕ





В вашем преобразовании идентичности отсутствуют атрибуты (очевидно). Используйте вместо этого:
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:template match = "@* | node()">
<xsl:copy>
<xsl:apply-templates select = "@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Затем просто добавьте свой последний шаблон.