同样,您也可以执行以下操作:
<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>我想在select的值上使用一个过滤器,就像执行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>’元素不是'value‘的元素,而是'item’的元素,这就是为什么这个不起作用。
谢谢大家的帮助,我终于做到了:)
发布于 2011-08-02 21:04:20
是的,select接受XPATH表达式作为它的参数
XSL:value-of
虽然规范说明您可以,但这可能取决于您的XML/XSL引擎的实现。
发布于 2011-08-02 22:34:29
请记住,在XSLT1.0中, <xsl:value-of select="someNodeSet"/>只输出someNodeSet中第一个节点的字符串值
另一边的
<xsl:for-each select="someNodeSet">
<xsl:value-of select="."/>
</xsl:for-each>输出someNodeSet中每个节点的字符串值。
发布于 2011-08-03 20:33:59
请注意,在XSLT1.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>https://stackoverflow.com/questions/6912458
复制相似问题