我的输入字符串如下所示
test1-> test2-> TEST3
我想构建一个如下所示的树结构。
-test1 + TEST2
如何使用xslt 2.0将字符串转换为树结构。
答案 0 :(得分:0)
以下样式表使用tokenize()
将字符串拆分为字符串序列,然后递归调用" nest"模板为序列中的第一个项创建元素,然后使用剩余的字符串调用模板以生成嵌套元素。
<?xml version="1.0" encoding="UTF-8"?>
<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 indent="yes"/>
<xsl:template match="/">
<xsl:variable name="delimited-input" select="'test1->test2->test3'"/>
<xsl:call-template name="nest">
<xsl:with-param name="names" select="tokenize($delimited-input, '->')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="nest" as="element()*">
<xsl:param name="names" as="xs:string*"/>
<xsl:if test="exists($names)">
<xsl:variable name="head" select="$names[position() = 1]"/>
<xsl:element name="{$head}">
<xsl:call-template name="nest">
<xsl:with-param name="names" select="$names[position() > 1]"/>
</xsl:call-template>
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
生成以下嵌套元素结构:
<test1>
<test2>
<test3/>
</test2>
</test1>
假设您要生成HTML,请调整以生成<div>
或任何必要的特定元素。