无法同时循环遍历两个子节点

时间:2016-09-27 06:12:58

标签: xslt

输入xml:

enter image description here

必需的输出格式:

enter image description here

使用for-each,我们可以遍历"标题下的所有子标签"或"对象&#34 ;;但是如何遍历两个标签并选择值并将它们组合起来如上所示(只是一个奇怪的例子:))。通过使用xsl转换。任何形式的帮助将不胜感激......

1 个答案:

答案 0 :(得分:1)

输入请仅发布文字。更容易复制

<payload>
    <headers>
        <header>
            <name>entry1</name>
        </header>
        <header>
            <name>entry2</name>
        </header>
        <header>
            <name>entry3</name>
        </header>
        <header>
            <name>entry4</name>
        </header>
    </headers>
    <objects>
        <row>
            <value>1231</value>
        </row>
        <row>
            <value>342</value>
        </row>
        <row>
            <value>98789</value>
        </row>
        <row>
            <value>6576</value>
        </row>
    </objects>
</payload>

XSLT:(有很多解决方案)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <xsl:element name="objects">
            <xsl:for-each select="payload/objects/row">
                <xsl:variable name="i" select="position()"/>
                <entry name="{/payload/headers/header[$i]/name}" value="{value}"></entry>
            </xsl:for-each>            
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

<强>结果

<objects>
   <entry name="entry1" value="1231"></entry>
   <entry name="entry2" value="342"></entry>
   <entry name="entry3" value="98789"></entry>
   <entry name="entry4" value="6576"></entry>
</objects>