0

我有一个 xml 和 Map 对象,map 包含一些关于 xml 节点的附加信息,即。

<searchPersonResponse>
 <persons>
   <person>
     <id>123</id>
   </person>
   <person>
     <id>456</id>
   </person>
  </persons>
</searchPersonResponse>

我的地图是这样的——

infoMap<123, <name="abc"><age="25">>
infoMap<456, <name="xyz"><age="80">>

我想要的输出是这样的:-

<searchPersonResponse>
 <persons>
  <person>
   <id>123</id>
   <name>abc</name>
   <age>25</age>
  </person>
  <person>
    <id>456</id>
    <name>xyz</name>
    <age>80</age>
   </person>
 </persons>
</searchPersonResponse>

我搜索了很多这种 eample/sample ,但没​​有找到类似的。请帮忙 !!提前致谢

4

1 回答 1

0

因为您可以将所有内容放在同一个 XML 文件中,所以您可以构建以下包含地图信息和数据的 XML 文件。

<xml>
    <!-- Original XML -->
    <searchPersonResponse>
        <persons>
            <person>
                <id>123</id>
            </person>
            <person>
                <id>456</id>
            </person>
        </persons>
    </searchPersonResponse>
    <!-- Map definition -->
    <map>
        <value id="123">
            <name>abc</name>
            <age>25</age>
        </value>
        <value id="456">
            <name>xyz</name>
            <age>80</age>
        </value>
    </map>
</xml>

现在您可以使用此样式表将 XML 文件转换为所需的输出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

    <!-- Identity template : copy all elements and attributes by default -->
    <xsl:template match="*|@*">
        <xsl:copy>
            <xsl:apply-templates select="*|@*" />
        </xsl:copy>
    </xsl:template>

    <!-- Avoid copying the root element -->
    <xsl:template match="xml">
        <xsl:apply-templates select="searchPersonResponse" />
    </xsl:template>

    <xsl:template match="person">
        <!-- Copy the person node -->
        <xsl:copy>
            <!-- Save id into a variable to avoid losing the reference -->
            <xsl:variable name="id" select="id" />
            <!-- Copy attributes and children from the person element and the elements from the map-->
            <xsl:copy-of select="@*|*|/xml/map/value[@id = $id]/*" />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
于 2013-02-19T10:39:48.063 回答