В файле xsl я объявляю шаблон для элемента Prov. Источник xml также содержит элемент документа, но для этого элемента нет шаблона.
почему преобразование xsl записывает какой-то внутренний текст из элемента Doc?
привет, это ввод xml
<Root>
<Doc attr1 = "1" attr2 = "2" attr3 = "3">
<node1 attr1 = "1" />
<node2 attr1 = "2" />
<node3 attr1 = "3" />
<node4>1900-01-01T00:00:00Z</node4>
<node5>1900-01-01T00:00:00Z</node5>
<node6>
<node7>
<node8>xxx</node8>
<node9>yyyy</node9>
<node10>zzz</node10>
</node7>
</node6>
<node11>xxx</node11>
<node12>yyy</node12>
</Doc>
<Prov attr1 = "1" attr2 = "2" attr3 = "3" />
</Root>
мне нужен этот вывод:
<Prov attr1 = "1" attr2 = "2" />
это xsl:
<?xml version = "1.0" encoding = "iso-8859-1"?>
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:msxsl = "urn:schemas-microsoft-com:xslt">
<xsl:output method = "xml" encoding = "ISO-8859-1" indent = "yes" />
<xsl:template match = "Prov" >
<xsl:element name = "Prov">
<xsl:copy-of select = "@attr1" />
<xsl:copy-of select = "@attr2" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
это фактический вывод:
<?xml version = "1.0" encoding = "ISO-8859-1"?>
1900-01-01T00:00:00Z
1900-01-01T00:00:00Z
xxx
yyyy
zzz
xxx
yyy
<Prov attr1 = "1" attr2 = "2"/>





Причиной того, что вы видите, являются встроенные правила шаблона. У вас есть только шаблон, соответствующий Prov. Это оставляет всю ветвь Doc вашего входного XML для обработки этими встроенными шаблонами, которые копируют все текстовые узлы в выходной файл.
Чтобы предотвратить это, вы можете добавить:
<xsl:template match = "/Root" >
<xsl:apply-templates select = "Prov"/>
</xsl:template>
в вашу таблицу стилей, или, если хотите, сократите все это до:
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "xml" version = "1.0" encoding = "UTF-8" indent = "yes"/>
<xsl:template match = "/Root" >
<Prov attr1 = "{Prov/@attr1}" attr2 = "{Prov/@attr2}"/>
</xsl:template>
</xsl:stylesheet>