我最近遇到了一个问题,我还没有找到一个好的解决方案。
Iam给出了一个具有平面层次结构的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执行此操作的最佳方法是什么?
非常感谢你的帮助。
修改
对不起。我没有真正解释它..
我给出了按照列表中顺序组织的元素列表。
dd 之后的所有 b 和 k 应该是前一个 dd 的子项。
k 之后的所有 b 应该是前一个 k 的子项。
答案 0 :(得分:1)
您可以使用
<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>
加上身份转换模板。