从分隔的字符串xslt 2.0创建树结构

时间:2016-01-17 16:56:27

标签: xslt-2.0

我的输入字符串如下所示

test1-> test2-> TEST3

我想构建一个如下所示的树结构。

-test1    + TEST2

如何使用xslt 2.0将字符串转换为树结构。

1 个答案:

答案 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>或任何必要的特定元素。