在阅读此answer以及this one之后,我仍然不知道如何根据其他元素(子)值删除元素(父级)。这是示例xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Order>
<Orderline>
<Itemcode>ABC</Itemcode>
<Qty>0</Qty>
</Orderline>
<Orderline>
<Itemcode>XYZ</Itemcode>
<Qty>3</Qty>
</Orderline>
<Orderline>
<Itemcode>DFG</Itemcode>
<Qty>0</Qty>
</Orderline>
</Order>
这是我目前拥有的XLST:
<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=
"*[Qty='0']/Itemcode | *[Qty='0']/Qty "/>
</xsl:stylesheet>
产生这个结果:
<Order>
<Orderline/>
<Orderline>
<Itemcode>XYZ</Itemcode>
<Qty>3</Qty>
</Orderline>
<Orderline/>
</Order>
如何删除空的<Orderline/>
元素?如果Qty = 0
答案 0 :(得分:1)
此:
<xsl:template match="*[Qty='0']/Itemcode | *[Qty='0']/Qty "/>
匹配Itemcode
或Qty
,因此这些是最终删除的节点。要删除整个Orderline
及其所有后代,您只需执行以下操作:
<xsl:template match="Orderline[Qty='0']"/>