代码之家  ›  专栏  ›  技术社区  ›  Random Developer

XSLT节点遍历

  •  1
  • Random Developer  · 技术社区  · 16 年前

    下面是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的单点值。有许多具有唯一ID的组,该组下有许多具有唯一ID的探测,每个探测都有值。

    我正在寻找一个可以得到这个值的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 回复  |  直到 16 年前
        1
  •  4
  •   Tim Palak Chaudhary    16 年前

    别忘了你可以一次选择几个级别。将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 节点发生在整个树中,发现 节点的深度。
    • 这个 [@id='9'] 零件选择那些 节点 id 9
    • 这个 Probe[@id='1'] 后面的部分立即选择 它找到的节点 身份证件 是1,依此类推。
        2
  •  1
  •   Marc Gravell    16 年前
    <xsl:value-of select="/NetworkAppliance/Group[@id=9]/Probe[@id=1]/Value"/>
    
        3
  •  0
  •   annakata    16 年前

    XSLT只是工具箱中的一个工具,没有 XPath .

        4
  •  0
  •   dnagirl    16 年前

    节点值的xpath为 /node/text()

    所以

    <xsl:value-of select="Probe[@id='1']/text()"/>