Я начал использовать XSLT (6 месяцев, новичок ie) и пытаюсь понять, как использовать белый список элементов в большом файле XML, чтобы сохранить только элементы в белом списке.
ирония в том, что я запускал предыдущий XSLT, который представляет собой просто большой список того, что не включать.
Из постов здесь я вижу, что если бы я только смотрел, какие элементы тоже хранятся, список будет гораздо легче поддерживать .
сохранить только элементы и / или атрибуты, занесенные в белый список
XSLT - Как сохранить только нужные элементы из XML
Я использую Saxon-HE 9.9.1.1N.
Вот уменьшенная версия моего XML, где я не хочу сохранять тип & brand elements.
<?xml version="1.0" encoding="UTF-8"?>
<FlatTable>
<Table>
<type>1</type>
<ID>0001</ID>
<Brand>0</Brand>
<Name>Test 1</Name>
<code>X7F7</code>
</Table>
<Table>
<type>1</type>
<ID>0002</ID>
<Brand>0</Brand>
<Name>Test 2</Name>
<code>X7F5</code>
</Table>
</FlatTable>
Ожидаемый результат будет:
<?xml version="1.0" encoding="UTF-8"?>
<FlatTable>
<Table>
<ID>0001</ID>
<Name>Test 1</Name>
<code>X7F7</code>
</Table>
<Table>
<ID>0002</ID>
<Name>Test 2</Name>
<code>X7F5</code>
</Table>
</FlatTable>
Я пытаюсь использовать решение, поставленное здесь Dimitre Novatchev но не могу за всю жизнь увидеть, куда я это напортачу: XSLT - Как сохранить только разыскиваемое элементы от XML
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="some:ns">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<ns:WhiteList>
<name>ID</name>
<name>Name</name>
<name>code</name>
</ns:WhiteList>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[not(descendant-or-self::*[name()=document('')/*/ns:WhiteList/*])]"/>
</xsl:stylesheet>