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'的元素