我想要包装所有附录元素,但前提是第一个附录元素的兄弟姐妹是其中的一部分。
所以如果输入就像
那样<part>
..
..
</part>
<appendix href="..">
</appendix>
<appendix href="..">
</appendix>
然后输出就像
<part>
..
..
</part>
<appendices>
<appendix href="..">
</appendix>
<appendix href="..">
</appendix>
</appendices>
我对XSLT很新。所以我所尝试的一切都失败到现在为止。任何帮助将不胜感激。
答案 0 :(得分:0)
使用XSLT 2.0,您的口头描述会转化为
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="*[appendix]">
<xsl:copy>
<xsl:for-each-group select="*" group-adjacent="boolean(self::appendix)">
<xsl:choose>
<xsl:when test="current-grouping-key() and preceding-sibling::*[1][self::part]">
<appendices>
<xsl:apply-templates select="current-group()"/>
</appendices>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>