将XML Element值映射到目标XML中的元素数组

时间:2016-11-23 14:04:49

标签: xslt xslt-2.0 soa xslt-grouping oracle-soa

我有一个要求,我有一个XML文件,如:

<main>
    <Qnumber>10</Qnumber>
    <Qaddress>hyderabad</Qaddress>
    <Qratio>12:3</Qratio>
    <QGet>Getthevalue</QGet>
</main>

这些值将按以下方式映射到目标模式:

我们有一个名为1到多(1-infinite)的标签:

<Additional properties>
    <property>
        <Name></Name>
        <Value></Value>
    </property>
</Additional properties>

现在我必须通过以下方式映射到这个:

<Additional properties>
    <property>
        <Name>Qnumber</Name>
        <Value>10</Value>
    </property>
    <property>
        <Name>Qaddress</Name>
        <Value>hyderabad</Value>
    </property>
    <property>
        <Name>Qratio</Name>
        <Value>12:3</Value>
    </property>
    <property>
        <Name>QGet</Name>
        <Value>Getthevalue</Value>
    </property>
</Additional properties>

我必须在XSLT中使用这些东西。任何人都可以帮助解决这个特殊的概念。     感谢

1 个答案:

答案 0 :(得分:1)

首先,您不能在XML元素的名称中包含空格。因此,我用_替换了空格。

这是一个解决方案:

<?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" />

    <xsl:template match="main">
        <Additional_properties>
            <xsl:for-each select="./*">
                <xsl:if test="position() &lt; 5">
                    <property>
                        <xsl:element name="Name">
                            <xsl:value-of select="name()"/>
                        </xsl:element>
                        <xsl:element name="Value">
                            <xsl:value-of select="text()"/>
                        </xsl:element> 
                    </property>
                </xsl:if>
            </xsl:for-each> 
        </Additional_properties>
    </xsl:template>
</xsl:stylesheet>