我有一个XML文档,显示了这一点:
<Element>
<Content>
<CustomTagAttribs>
<type>breadcrumb</type>
</CustomTagAttribs>
<ElementData>
<LBarItem>TEXT!</LBarItem>
</ElementData>
</Content>
<Element>
还有另一个<Element>
实例,就像上面那个,但没有<type>breadcrumb</type>
。我想仅在具有面包屑类型的<Element>
中定位LBarItems。我该怎么做?
这就是我一直在尝试的:
<xsl:for-each select="//Content/ElementData/LBarItem">
<xsl:if test="../type='breadcrumb'">
<xsl:value-of select="Title"/>
</xsl:if>
</xsl:for-each>
任何帮助?
答案 0 :(得分:2)
你为什么不用:
/Element/Content[CustomTagAttribs/type = 'breadcrumb']/ElementData/LBarItem
答案 1 :(得分:1)
您根本不需要使用<xsl:for-each>
和任何条件逻辑。
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="Content[CustomTagAttribs/type='breadcrumb']/*/LBarItem">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于此XML文档(包含两个Element
元素):
<t>
<Element>
<Content>
<CustomTagAttribs>
<type>breadcrumb</type>
</CustomTagAttribs>
<ElementData>
<LBarItem>I have "breadcrumb" type</LBarItem>
</ElementData>
</Content>
</Element>
<Element>
<Content>
<CustomTagAttribs>
<type>something else</type>
</CustomTagAttribs>
<ElementData>
<LBarItem>I have "something else" type</LBarItem>
</ElementData>
</Content>
</Element>
</t>
生成想要的正确结果:
<LBarItem>I have "breadcrumb" type</LBarItem>