如何使用xslt遍历xml中的内部节点

时间:2017-06-05 13:01:41

标签: xml xslt

我需要循环遍历具有多个内部节点的XML。我有一个样本xml,如下所示

    <?xml version ="1.0" encoding ="utf-8" ?>
    <TestUser>
      <Users>
        <UserData name="test123" address="USA"/>
        <UserCommunication>
          <Communication mode="Te" value="123456879"/>
          <Qualification>
            <PG value="No"></PG>
          </Qualification>
            <Qualification>
            <UG value="YES"></UG>
          </Qualification>
        </UserCommunication>
      </Users>
      <Users>
        <UserData name="test124" address="UK"/>
        <UserCommunication>
          <Communication mode="Te" value="1567894525"/>
          <Qualification>
            <PG value="No"></PG>
          </Qualification>
           <Qualification>
            <UG value="YES"></UG>
          </Qualification>
        </UserCommunication>
      </Users>
      <Users>
        <UserData name="test125" address="INDIA"/>
        <UserCommunication>
          <Communication mode="Te" value="5465897845"/>
          <Qualification>
            <PG value="YES"></PG>
          </Qualification>
           <Qualification>
            <UG value="YES"></UG>
          </Qualification>
        </UserCommunication>
      </Users>
    </TestUser>

输出应该在文本视图中,如下所示

test123 USA Te 123456879 No YES  
test124 UK Te 1567894525 No YES  
test125 INDIA Te 5465897845 YES No  

我也在HTML视图中需要它。

任何人都可以帮我解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

假设使用XSLT 2.0,您只需使用

即可
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output method="text"/>

    <xsl:template match="/">
        <xsl:value-of select="//Users/string-join(.//@*, ' ')" separator="&#10;"/>
    </xsl:template>

</xsl:stylesheet>

,结果是

test123 USA Te 123456879 No YES
test124 UK Te 1567894525 No YES
test125 INDIA Te 5465897845 YES YES

如果您想要HTML输出,那么您可以使用

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output method="html"/>

    <xsl:template match="/">
      <html>
        <body>
           <pre>
             <xsl:value-of select="//Users/string-join(.//@*, ' ')" separator="&#10;"/>
           </pre>
         </body>
       </html>
    </xsl:template>

</xsl:stylesheet>

使用相同的方法或当然是编写模板以匹配并将Users映射到HTML tr元素和模板以匹配并将Users//*/@*映射到HTML td元件。