我需要从string创建节点,例如
目录root1 /根-2 / root3
我想要它生成像那样的节点
<node name="root1">
<node name="root2">
<node name="root3"/>
</node>
</node>
我试过这个样式表
<xsl:template match="/">
<xsl:variable name="root" select="'root1/root2/root3'"/>
<xsl:call-template name="createNodes">
<xsl:with-param name="root" select="$root"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="createNodes">
<xsl:param name="root"/>
<xsl:param name="name"/>
<xsl:variable name="rootPath" select="tokenize($root,'/') "/>
<xsl:for-each select="$rootPath">
<xsl:element name="node">
<xsl:attribute name="name">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:call-template name="createNodes">
<xsl:with-param name="caption" select="$rootPath"/>
</xsl:call-template>
</xsl:element>
</xsl:for-each>
</xsl:template>
我得到这个输出的问题
<node name="root1">
<node name="root2">
<node name="root3">
需要你的帮助:D
答案 0 :(得分:0)
基本上而不是循环遍历每个项目,你需要在你去的时候分解删除第一个项目的字符串,这样你就会得到一个嵌套的结果。
这应该有效:
<xsl:template name="createNodes">
<xsl:param name="root"/>
<xsl:if test="$root">
<node name="{substring-before(concat($root,'/'),'/')}">
<xsl:call-template name="createNodes">
<xsl:with-param name="root" select="substring-after($root,'/')"/>
</xsl:call-template>
</node>
</xsl:if>
</xsl:template>