XSLT检查是否存在xml元素,否则跳过父元素

时间:2019-06-14 16:17:53

标签: xml xslt

如果子元素不存在,我一直在尝试跳过特定的父元素。这是XSLT映射的新功能。如果我在某个地方出错了,请纠正我。

下面是我拥有的xml

<element1>
    <element2>
        <element3>
            <data1>aaaa</data1>
            <data2>bbbb</data2>
            <element4>
                <data3>cccc</data3>
                <data4>dddd</data4>
            </element4>
        </element3>
    </element2>
    <element2>
        <element3>
            <data1>eeee</data1>
            <data2>ffff</data2>
        </element3>
    </element2>
</element1>

我想检查元素4是否存在,否则我想完全跳过元素2。

预期结果是

<element1>
    <element2>
        <element3>
            <data1>aaaa</data1>
            <data2>bbbb</data2>
            <element4>
                <data3>cccc</data3>
                <data4>dddd</data4>
            </element4>
        </element3>
    </element2>
</element1>

我一直在尝试以下xsl:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <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="/element1/element2[element3/element4 = '']"/>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

如果element2存在并且其值为空字符串,则当前模板匹配项将仅与element3/element4匹配。也就是说,它会与此匹配...

<element2>
    <element3>
        <element4 />
    </element3>
</element2>

要检查是否存在(或不存在),您需要做的是...。

<xsl:template match="/element1/element2[not(element3/element4)]"/>