如果子元素不存在,我一直在尝试跳过特定的父元素。这是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>
答案 0 :(得分:2)
如果element2
存在并且其值为空字符串,则当前模板匹配项将仅与element3/element4
匹配。也就是说,它会与此匹配...
<element2>
<element3>
<element4 />
</element3>
</element2>
要检查是否存在(或不存在),您需要做的是...。
<xsl:template match="/element1/element2[not(element3/element4)]"/>