如何根据标记的数量对xml中的特定数量的块进行分组

时间:2016-08-12 02:24:44

标签: xslt-1.0

我有一个像下面这样的大xml,我想在一个块下分组特定数量的标签;下面的预期输入和输出将使我的问题更加清晰。非常感谢任何帮助

输入文件是

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root>
    <ListABC>
        <ABC name="name1" class="class1" age="age1" />
        <ABC name="name2" class="class2" age="age2" />
        <ABC name="name3" class="class3" age="age3" />
        <ABC name="name4" class="class4" age="age4" />
        <ABC name="name5" class="class5" age="age5" />
    </ListABC>
    <ListABC>
        <EOF tag1="1" tag2="2" tag3="3"/>
    </ListABC>
</Root>

我需要在每两个 ABC 元素之后创建一个标签 ListABC ,同时,最后一个包含 ListABC EOF 元素不应受到任何影响。这就是我需要输出的方法

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root>
    <ListABC>
        <ABC name="name1" class="class1" age="age1" />
        <ABC name="name2" class="class2" age="age2" />
    </ListABC>
    <ListABC>
        <ABC name="name3" class="class3" age="age3" />
        <ABC name="name4" class="class4" age="age4" />
    </ListABC>
    <ListABC>
        <ABC name="name5" class="class5" age="age5" />
    </ListABC>
    <ListABC>
        <EOF tag1="1" tag2="2" tag3="3"/>
    </ListABC>
</Root>

非常感谢!

1 个答案:

答案 0 :(得分:0)

怎么样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/Root">
    <xsl:copy>
        <xsl:for-each select="ListABC[not (EOF)]/ABC[position() mod 2 = 1]">
            <ListABC>
                <xsl:copy-of select=". | following-sibling::ABC[1]"/>
            </ListABC>
        </xsl:for-each>
        <xsl:copy-of select="ListABC[EOF]"/>
    </xsl:copy>
</xsl:template> 

</xsl:stylesheet>