Обход узла XSLT - PullRequest
       22

Обход узла XSLT

1 голос
/ 13 октября 2009

Вот фрагмент кода XML:

<?xml version="1.0" encoding="iso-8859-1" ?>
<NetworkAppliance id="S123456">
  <Group id="9">
    <Probe id="1">
      <Value>74.7</Value>
    </Probe>
</NetworkAppliance>

Я хочу получить однозначное значение 74,7. В этой группе есть много групп с уникальными идентификаторами и много зондов со своими уникальными идентификаторами со значениями.

Я ищу, например, XSLT-код, который может дать мне это одно значение. Вот что у меня не работает:

<?xml version="1.0" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" version="3.2" /> 
    <xsl:template match="NetworkAppliance">
        <xsl:apply-templates select="Group[@id='9']"/>
    </xsl:template>
    <xsl:template match="Group">
        Temp: <xsl:value-of select="Probe[@id='1']/Value"/>
        <br/>
    </xsl:template>
</xsl:stylesheet>

Вот что у меня получилось в итоге:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <html>
 <body>
     <xsl:for-each select="NetworkAppliance/Group[@id=9]/Probe[@id=1]">
             Value: <xsl:value-of select="Value" />
     </xsl:for-each>
 </body>
 </html>
</xsl:template>
</xsl:stylesheet>

Ответы [ 4 ]

4 голосов
/ 14 октября 2009

Не забывайте, что вы можете выбрать несколько уровней одновременно. Исправление вашего XML к:

<?xml version="1.0" encoding="iso-8859-1" ?>
<NetworkAppliance id="S123456">
  <Group id="9">
    <Probe id="1">
      <Value>74.7</Value>
    </Probe>
  </Group>
</NetworkAppliance>

и используя эту таблицу стилей:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" version="3.2" /> 

  <xsl:template match="/">
    Temp: <xsl:value-of select="//Group[@id='9']/Probe[@id='1']/Value"/>
    <br/>
  </xsl:template>
</xsl:stylesheet>

мы можем выбрать тот предмет, который вас интересует.

Очки на заметку:

  • Часть выражения // означает, что поиск узлов Group происходит по всему дереву, обнаруживая узлы Group на любой глубине.
  • Часть [@id='9'] выбирает эти Group узлы с id из 9
  • Часть Probe[@id='1'] сразу после этого выбирает тех потомков найденных узлов Group, где id равен 1 и т. Д.
1 голос
/ 14 октября 2009
<xsl:value-of select="/NetworkAppliance/Group[@id=9]/Probe[@id=1]/Value"/>
0 голосов
/ 13 октября 2009

XSLT - это всего лишь один из инструментов в комплекте, и ничего без XPath .

0 голосов
/ 13 октября 2009

xpath для значения узла /node/text()

Итак

<xsl:value-of select="Probe[@id='1']/text()"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...