就像你可以做同样的事情......
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
您可以使用Value-Of语句进行相同的过滤吗?
<xsl:value-of select="value[name='Name']" />
谢谢, 詹姆斯。
编辑:
很抱歉这个混乱。
我有一些XML:
<DynamicData>
<item>
<name>Name</name>
<value xsi:type="xsd:int">0</value>
</item>
<item>
<name>Value</name>
<value xsi:type="xsd:long">9</value>
</item>
</DynamicData>
我想在我的选择值上使用过滤器,这与在执行for-each时的方式非常相似。我刚开始看XSLT,所以不确定它的能力。最后我使用了以下XSLT:
<set>
<xsl:attribute name="name">
<xsl:choose>
<xsl:when test="item[name='Name']/value=0">Low</xsl:when>
<xsl:when test="item[name='Name']/value=1">Medium</xsl:when>
<xsl:when test="item[name='Name']/value=2">High</xsl:when>
</xsl:choose>
</xsl:attribute>
...
我遇到的问题是我将过滤器放在测试中的value元素之后,就像这样。 <xsl:when test="item/value[name='Name']=2">High</xsl:when>
显然,'name'元素不是'value'的元素,而是'item'的元素,因此这不起作用。
感谢大家的帮助,我最终到了那里:)
答案 0 :(得分:2)
请记住,在XSLT 1.0中 <xsl:value-of select="someNodeSet"/>
仅输出someNodeSet
另一方:
<xsl:for-each select="someNodeSet">
<xsl:value-of select="."/>
</xsl:for-each>
在someNodeSet
中输出每个节点的字符串值。
答案 1 :(得分:1)
答案 2 :(得分:0)
请注意,在XSLT 1.0中,您可以使用xsl:copy-of
和text()
测试节点解决此问题。
示例,给出此输入:
<catalog>
<cd>
<artist>Bob Dylan</artist>
</cd>
<cd>
<artist>Pink Floyd</artist>
<title>ummagumma</title>
</cd>
<cd>
<artist>Pink Floyd</artist>
<title>Atom Earth Mother</title>
</cd>
</catalog>
您可以按如下方式使用xsl:copy-of
:
<xsl:copy-of select="catalog/cd[artist='Pink Floyd']/title/text()"/>
将完全返回所有匹配节点的值:
<xsl:for-each select="catalog/cd[artist='Pink Floyd']/title">
<xsl:value-of select="."/>
</xsl:for-each>