输出树中的所有节点

时间:2015-11-11 15:35:57

标签: xslt

我对XSL很新,我想在树形结构中按名称打印出所有元素节点。那样:

<root>
          <childX>
                   <childY1/>
                   <childY2/>
          </childX>
          <childX2/>
 </root>

将产生:

root
     +--childX
          +--childY1
          +--childY2
     +--childX2

我尝试了一些循环,但可能需要递归.... 到目前为止我所拥有的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"           xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="root" match="/">
<html>
<xsl:for-each select="*">
  <xsl:value-of select="local-name()"/><br/>
  +-- <xsl:for-each select="*">
  <xsl:value-of select="local-name()"/><br/>
</xsl:for-each>
</html>
</xsl:template>
如果你可以提供一些提示,那将是非常棒的。 谢谢!

1 个答案:

答案 0 :(得分:1)

使用apply-templates完成递归,我不确定输出HTML然后尝试将树结构构造为纯文本(在HTML中创建嵌套列表似乎更合适)是个好主意但是在这里去:

<xsl:template match="/">
  <html>
    <head>
      <title>Example</title>
    </head>
    <body>
        <pre>
            <xsl:apply-templates/>                   
        </pre>  
    </body>
  </html>
</xsl:template>

<xsl:template match="*">
    <xsl:param name="indent" select="'--'"/>
    <xsl:value-of select="concat('+', $indent, ' ', local-name())"/>
    <br/>
    <xsl:apply-templates select="*">
        <xsl:with-param name="indent" select="concat('--', $indent)"/>
    </xsl:apply-templates>
</xsl:template>