如何访问此特定xml节点的值?

时间:2011-05-03 12:24:35

标签: xslt xpath

我正在将XML文档转换为HTML,并希望选择一些特定元素(用于HTML页面的head.title)。

我的源XML看起来如此:

<document>
  <vars>
    <var name="serialno">
      12345                     <<--- I want THIS value
    </var>
    <var name="rev-date" rev="old">
      2000-01-01
    </var>
    <var name="rev-date" rev="new">
      2011-05-01                <<--- ...and also THIS value
    </var>
    ... more vars
  </vars>
    ... more data
</document>

现在,序列号将与“<xsl:value-of select="/vars/var@serialno"/>”类似,但我无法弄清楚如何使用特定var来解决name。同样对于修订日期,除了我需要指定两个属性。 我该怎么做?

2 个答案:

答案 0 :(得分:2)

<xsl:value-of select="document/vars/var[@name='serialno']"/>

<xsl:value-of select="document/vars/var[@name='rev-date' and @rev='new']"/>

要测试这一点,请访问xmlper.com并将其键入XSL:

       <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- Edited by XMLSpy® -->
    <html xsl:version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns="http://www.w3.org/1999/xhtml">


     <xsl:value-of select="document/vars/var[@name='serialno']"/>

    <xsl:value-of select="document/vars/var[@name='rev-date' and @rev='new']"/>

    </html>

这是XML文档:

<document>
  <vars>
    <var name="serialno">
      12345                    
    </var>
    <var name="rev-date" rev="old">
      2000-01-01
    </var>
    <var name="rev-date" rev="new">
      2011-05-01              
    </var>
    ... more vars
  </vars>

</document>

答案 1 :(得分:1)

使用

/*/vars/var[@name = 'serialno']/text()

获取所需的文本节点或只是

string(/*/vars/var[@name = 'serialno'])

获取所需的字符串。

并使用

/*/vars/var
       [@name = 'rev-date' 
      and
        @rev = 'new'
       ]/text()

获取第二个所需的文本节点或只是

string(/*/vars/var
           [@name = 'rev-date' 
          and
            @rev = 'new'
           ]/text()
      )

获取其字符串值。