我对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>
如果你可以提供一些提示,那将是非常棒的。
谢谢!
答案 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>