XSLT转换重复元素的列表

时间:2016-06-16 13:03:15

标签: xml xslt

我正在尝试对元素名称进行迭代。我以

的形式给出了输入
<list>
    <element1>ID 1</element1>
    <element2>name 1</element2>
    <element3>town 1</element3>        
    <element4>ID 2</element4>
    <element5>name 2</element5>
    <element6>town 2</element6>
    <!-- list continues like that -->
</list>

现在我的目标方案应该是这样的:

<newlist>
    <Person>
        <ID>ID 1</ID>
        <Name>name 1</Name>
        <Town>town 1</Town>
    </Person>
    <Person>
        <ID>ID 2</ID>
        <Name>name 2</Name>
        <Town>town 2</Town>
    </Person>
    <!-- more Persons here -->
</newlist>

第一个列表中的条目总是以相同的方式重复,所以我想到的是迭代它们并将模运算符应用于循环计数器,以便找出条目应该是正确的元素映射到。 但是我找不到像这样的转型。怎么去这里?

1 个答案:

答案 0 :(得分:1)

以这种方式试试吗?

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:template match="/list">
    <xsl:for-each select="*[position() mod 3 = 1]">
        <Person>
            <ID>
                <xsl:value-of select="."/>
            </ID>
            <Name>
                <xsl:value-of select="following-sibling::*[1]"/>
            </Name>
            <Town>
                <xsl:value-of select="following-sibling::*[2]"/>
            </Town>
        </Person>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>