XSLT-的值
同样的方法,你可以做以下XSLT-的值,xslt,Xslt,同样的方法,你可以做以下 <xsl:for-each select="catalog/cd[artist='Bob Dylan']"> 您可以对语句的值执行相同的筛选吗 <xsl:value-of select="value[name='Name']" /> 谢谢, 詹姆斯 编辑: 很抱歉给你带来了困惑 我有一些XML: <DynamicData> <item> <name>Name</name&g
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
您可以对语句的值执行相同的筛选吗
<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>
名称
0
价值
9
我想在我的select值上使用一个过滤器,这与为每个值执行一次筛选时可能采用的方式非常相似。我刚刚开始研究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>
...
低
中等
高
...
我遇到的问题是我在测试中把过滤器放在值元素之后,就像这样High
显然,“name”元素不是“value”元素,而是“item”元素,因此它不起作用
谢谢大家的帮助,我终于做到了:)是的,select使用XPATH表达式作为参数
虽然规范中说明了可以,但它可能取决于XML/XSL引擎的实现。是,select将XPATH表达式作为参数
虽然规范中说明了您可以这样做,但这可能取决于XML/XSL引擎的实现。请记住,在XSLT 1.0中,
只输出someNodeSet
中第一个节点的字符串值
在另一边:
<xsl:for-each select="someNodeSet">
<xsl:value-of select="."/>
</xsl:for-each>
输出
someNodeSet
中每个节点的字符串值请记住,在XSLT1.0中
只输出someNodeSet
中第一个节点的字符串值
在另一边:
<xsl:for-each select="someNodeSet">
<xsl:value-of select="."/>
</xsl:for-each>
输出
someNodeSet
中每个节点的字符串值。请注意,在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:for-each select="catalog/cd[artist='Pink Floyd']/title">
<xsl:value-of select="."/>
</xsl:for-each>
请注意,在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:for-each select="catalog/cd[artist='Pink Floyd']/title">
<xsl:value-of select="."/>
</xsl:for-each>
您正在谈论XSLT 1.0。在2.0中,xsl:value of输出所有的值,用空格分隔(并允许您选择不同的分隔符)。@Michael Kay:编辑答案,明确地说:“在XSLT 1.0中”,在XSLT 1.0中xsl:copy of
和text()
测试节点可以有效地替换OP使用的xsl:for-each
。@empo:当然。但是他要问的问题是比较
和
我们是否确定OP要比较,他们只问了您所说的XSLT 1.0的过滤方面。在2.0中,xsl:value of输出所有的值,用空格分隔(并允许您选择不同的分隔符)。@Michael Kay:编辑答案,明确地说:“在XSLT 1.0中”,在XSLT 1.0中xsl:copy of
和text()
测试节点可以有效地替换OP使用的xsl:for-each
。@empo:当然。但是他问的问题是比较
和
我们是否确定OP要求比较,他们只问了过滤方面你想要的结果是什么,你能提供一些样本输入/输出吗?你想要的结果是什么,你能提供一些样本输入/输出吗?确实可能,我遇到的问题是,我对元素进行了“太远”的过滤。我做的是“item/value[name='name']”,而不是“item[name='name']/value”。'name元素是'item'的元素,而不是'value'元素。这确实是可能的,我遇到的问题是我对元素进行了过滤,可以说过滤得太远了。我做的是“item/value[name='name']”,而不是“item[name='name']/value”。'name元素是'item'的元素,而不是'value'的元素