XSLT - 价值

时间:2011-08-02 12:58:42

标签: xslt

就像你可以做同样的事情......

<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'的元素,因此这不起作用。

感谢大家的帮助,我最终到了那里:)

3 个答案:

答案 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)

是的,select将XPATH表达式作为参数

XSL:value-of

虽然规范声明可以,但它可能取决于XML / XSL引擎的实现。

答案 2 :(得分:0)

请注意,在XSLT 1.0中,您可以使用xsl:copy-oftext()测试节点解决此问题。


示例,给出此输入:

<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>