Это мой ввод xml:
<root>
<node1/>
<node2/>
<node3/>
<node4/>
<othertags/>
</root>
Выходные данные должны быть:
<root>
<othertags/>
</root>
если любой из 4 узлов не равен нулю, то ни один из тегов не должен быть удален
пример:
<root>
<node1/>
<node2/>
<node3/>
<node4>sample_text</node4>
<othertags/>
</root>
Тогда вывод должен быть таким же, как ввод xml.
<root>
<node1/>
<node2/>
<node3/>
<node4>sample_text</node4>
<othertags/>
</root>
Это код XSL, который я разработал ::
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/node1[.='' and ../node2/.='' and ../node3/.='' and ../node4/.='']
|/root/node2[.='' and ../node1/.='' and ../node3/.='' and ../node4/.='']
|/root/node3[.='' and ../node1/.='' and ../node2/.='' and ../node4/.='']
|/root/node4[.='' and ../node1/.='' and ../node2/.='' and ../node3/.='']"/>
Как видите, код требует больше усилий и становится более громоздким по мере увеличения числа узлов. Есть ли альтернативный способ преодолеть это узкое место?