XSLT扁平列表树层次结构
问题描述:
我最近遇到了一个问题,我还没有找到一个好的解决方案。XSLT扁平列表树层次结构
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的最佳方式?
非常感谢你的帮助。
编辑:
对不起。我没有真正地解释它..
Iam给出了列表中的元素列表,它们按它们的订单组织在列表中。
所有B的和K公司的后DD应该是前面的DD的孩子。
所有B A ķ后的都应该是前ķ孩子。
答
您可以使用
<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?目前,它不是格式良好的,因为(除'xml_file'外)没有任何标签具有关联标签,这意味着XSLT将无法处理它。 –
您需要解释层次结构“定义”的逻辑。 –
感谢您的回复。我更新了我的问题的描述。 – caloemar