У меня есть текущий XSLT, который я использую для удаления пустых узлов:
.,,,,,,,.
Мне нужно найти способ также удалить узлы с -1 в них
Я думаю, что требуется удалить все"пустые узлы".
Обработка зависит от определения «пустого узла».Одно разумное определение в вашем случае: Любой элемент, который не имеет атрибутов и дочерних элементов или не имеет атрибутов и имеет только один дочерний элемент, который является текстовым узлом со значением -1
.
Для это определение здесь является простым решением.
Это преобразование :
<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="*[not(@*) and not(*) and (not(text()) or .=-1)]"/>
</xsl:stylesheet>
при применении к этому примеру XMLдокумент :
<t>
<a>-1</a>
<a>2</a>
<b><c/></b>
<d>-1</d>
<d>15</d>
<e x="1"/>
<f>foo</f>
</t>
дает желаемый, правильный результат :
<t>
<a>2</a>
<b/>
<d>15</d>
<e x="1"/>
<f>foo</f>
</t>