XSLT 将平面列表转换为树状层次结构
XSLT a flat list to a tree hierarchy
我最近 运行 遇到了一个问题,但我还没有找到好的解决方案。
我给定了一个具有平面层次结构的 XML 文件,我想将其运行转换为定义的层次结构。
<xml_file>
<dd/>
<b/>
<b/>
<dd/>
<b/>
<b/>
<dd/>
<k/>
<b/>
<b/>
<dd/>
<b/>
<b/>
</xml_file>
我想把它变成什么:
<xml_file>
<dd>
<b/>
<b/>
</dd>
<dd>
<b/>
<b/>
</dd>
<dd>
<k>
<b/>
<b/>
</k>
</dd>
<dd>
<b/>
<b/>
</dd>
</xml_file>
使用 xslt 2.0 执行此操作的最佳方法是什么?
非常感谢您的帮助。
编辑:
对不起。我真的没解释好..
我给定了一个元素列表,这些元素是按列表中的 顺序 组织的。
所有 b's 和 k's 在 dd 之后应该是 children 前面的 dd.
所有 b 的 在 k 之后应该是前面 k[= 的 children 41=].
您可以使用
<xsl:template match="xml_file">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="dd">
<xsl:copy>
<xsl:for-each-group select="current-group() except ." group-starting-with="k">
<xsl:choose>
<xsl:when test="self::k">
<xsl:copy>
<xsl:apply-templates select="current-group() except ."/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
加上身份转换模板。
我最近 运行 遇到了一个问题,但我还没有找到好的解决方案。
我给定了一个具有平面层次结构的 XML 文件,我想将其运行转换为定义的层次结构。
<xml_file>
<dd/>
<b/>
<b/>
<dd/>
<b/>
<b/>
<dd/>
<k/>
<b/>
<b/>
<dd/>
<b/>
<b/>
</xml_file>
我想把它变成什么:
<xml_file>
<dd>
<b/>
<b/>
</dd>
<dd>
<b/>
<b/>
</dd>
<dd>
<k>
<b/>
<b/>
</k>
</dd>
<dd>
<b/>
<b/>
</dd>
</xml_file>
使用 xslt 2.0 执行此操作的最佳方法是什么?
非常感谢您的帮助。
编辑:
对不起。我真的没解释好..
我给定了一个元素列表,这些元素是按列表中的 顺序 组织的。
所有 b's 和 k's 在 dd 之后应该是 children 前面的 dd.
所有 b 的 在 k 之后应该是前面 k[= 的 children 41=].
您可以使用
<xsl:template match="xml_file">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="dd">
<xsl:copy>
<xsl:for-each-group select="current-group() except ." group-starting-with="k">
<xsl:choose>
<xsl:when test="self::k">
<xsl:copy>
<xsl:apply-templates select="current-group() except ."/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
加上身份转换模板。