XSLT xsl:for-each仅执行第一行

时间:2017-09-25 08:12:16

标签: xml xslt

我有一些XML,我给XSLT样式表做了一些转换,但不知怎的,xsl:for-each只通过第一个节点循环...

我期待它循环通过所有节点并转换它们,但不知何故它只会循环通过第一个值,不知道我在这里做错了什么..

这是我的XML:

<?xml version="1.0"?>
<email>
    <uid>66</uid>
    <subject>You have been added to a Priooo project</subject>
    <message/>
    <arguments>
        <argument>
            <name>
                -url-
            </name>
            <value>
                http://localhost/iaf4asap/#/resetpassword/c0a82001--6b0373de_15eb8270a5e_-7fea</value>
            </argument>
            <argument>
                <name>
                    -inviteBy-
                </name>
                <value>Laurens Makel</value>
            </argument>
            <argument>
                <name>
                    -project-
                </name>
                <value>junkspam0003@outlook.com</value>
            </argument>
        </arguments>
    <templateId>
        c02f1e50-d569-41d9-87ec-933cded8a330
    </templateId>
</email>

这是我的XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" method="xml"/>


    <xsl:template match="/email">
    <email>
            <uniqueArguments>
                 <xsl:for-each select="arguments">
                    <uniqueArgument>
                        <name><xsl:value-of select="argument/name"/></name>
                        <value><xsl:value-of select="argument/value"/></value>
                    </uniqueArgument>
                 </xsl:for-each>
            </uniqueArguments>
            <templateId>
                <xsl:value-of select="templateId"></xsl:value-of>
            </templateId>
        </email>
    </xsl:template>

</xsl:stylesheet>       

这给了我以下输出..:

     <?xml version="1.0"?>
<email>
    <uniqueArguments>
        <uniqueArgument>
            <name>
                -url-
            </name>
            <value>
                http://localhost/iaf4asap/#/resetpassword/c0a82001--6b0373de_15eb8270a5e_-7fea</value>
            </uniqueArgument>
        </uniqueArguments>
    <templateId>
        c02f1e50-d569-41d9-87ec-933cded8a330
    </templateId>
</email>

1 个答案:

答案 0 :(得分:1)

您只在一个节点<xsl:for-each select="arguments/argument"> 上循环,xsl:for-each需要在结果中包含许多节点的XPath,而是使用:

15 52 27 0.00
15 52 37 0.2
15 52 50 0.00
15 53 12 2.55
15 54 21 10.00
15 55 15 13.55