我有一个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>
我搜索了很多这样的样本/样本,但没有找到类似的样本。请帮忙 !!提前谢谢
答案 0 :(得分: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>