使用XSLT基于子元素值删除元素

时间:2015-08-11 21:58:27

标签: xml xslt

在阅读此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

的值,则想法是删除Orderline,Itemcode和Qty元素

1 个答案:

答案 0 :(得分:1)

此:

<xsl:template match="*[Qty='0']/Itemcode | *[Qty='0']/Qty "/>

匹配ItemcodeQty,因此这些是最终删除的节点。要删除整个Orderline及其所有后代,您只需执行以下操作:

<xsl:template match="Orderline[Qty='0']"/>
相关问题