Как мне получить доступ к значению этого конкретного узла XML? - PullRequest
1 голос
/ 03 мая 2011

Я преобразовываю документ XML в HTML и хочу выделить несколько конкретных элементов (для использования в head.title страницы HTML).

Мой исходный 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 ]

2 голосов
/ 03 мая 2011
<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 голос
/ 03 мая 2011

Используйте :

/*/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()
      )

, чтобы получить его строковое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...