У меня есть ввод XML, который выглядит следующим образом:
<root>
<NFe>
<infNFe>
<wanted_node_1>
<stuff>1111111</stuff>
</wanted_node_1>
<wanted_node_2>
<stuff>2222222</stuff>
</wanted_node_2>
<unwanted_node_1>
<stuff>aa</stuff>
</unwanted_node_1>
...
<unwanted_node_25>
<stuff>zz</stuff>
</unwanted_node_25>
</infNFe>
</NFe>
</root>
Я хочу, чтобы вывод был файлом XML с двумя братьями и сестрами " требуемые узлы " как таковые
<root>
<NFe>
<infNFe>
<wanted_node_1>
<stuff>1111111</stuff>
</wanted_node_1>
<wanted_node_2>
<stuff>2222222</stuff>
</wanted_node_2>
</infNFe>
</NFe>
</root>
Я НЕ хочу копировать 25 других братьев и сестер " unwanted_nodes ".Я новичок в XSL, и код, который я написал, решает эту проблему, создав список исключений длиной 25 элементов, содержащий все нежелательные элементы:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"
indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="wanted_node_1 | wanted_node_2 ">
<xsl:element name="{name()}">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!--exceptions list-->
<xsl:template match="unwanted_node_1 | unwanted_node_2 | unwanted_node_3 | ... | unwanted_node25 "/>
</xsl:stylesheet>
Моя проблема заключается в том, что в настоящее время список из 25 нежелательных длинныхчисло братьев и сестер может увеличиться, что заставит меня постоянно обновлять «список исключений», что является очевидным плохим подходом.Поскольку мои два " требуемые узлы " всегда будут одинаковыми, я бы хотел, чтобы мой XSLT копировал ТОЛЬКО 2 требуемых узла, пропуская все остальные элементы, используя такую логику:
если match = wanted_node_1 или match = wanted_node_2 , тогда делать вещи else skipp нежелательный узел end if
Я пытался работать со списком исключений, используя такие вещи, как
<xsl:template match="not(self::wanted_node_1) and not(self::wanted_node_2)>
со многими перестановками позиций скобок, фигурных скобок и т. д., но всегда получал сообщение об ошибке.Как тогда ограничить вывод XML только двумя требуемыми узлами без создания 25 длинных списков нежелательных братьев и сестер?
Любая помощь будет принята с благодарностью.Спасибо!