我有两个 xml 文件,需要使用 XSLT 将它们合并为一个。
第一个 XML 是(原始 XML):
<feed>
<author>
<firstName>f</firstName>
<lastName>l</lastName>
</author>
<date>2011-01-02 </date>
<entry>
<id>1</id>
<Name>aaa</Name>
<Content>XXX</Content>
</entry>
<entry>
<id>2</id>
<Name>bbb</Name>
<Content>YYY</Content>
</entry>
</feed>
第二个XML(更新数据)是这样的:
<feed>
<author>
<firstName>f</firstName>
<lastName>l</lastName>
</author>
<date>2012-05-02 </date>
<entry>
<id>2</id>
<Name>newName</Name>
<Content>newContent</Content>
</entry>
<entry>
<id>3</id>
<Name>ccc</Name>
<Content>ZZZ</Content>
</entry>
</feed>
所需的合并结果 - 使用第二个 XML 更新第一个 XML:
<feed>
<author>
<firstName>f</firstName>
<lastName>l</lastName>
</author>
<date>2012-05-02 </date>
<entry>
<id>1</id>
<Name>aaa</Name>
<Content>XXX</Content>
</entry>
<entry>
<id>2</id>
<Name>newName</Name>
<Content>newContent</Content>
</entry>
<entry>
<id>3</id>
<Name>ccc</Name>
<Content>ZZZ</Content>
</entry>
</feed>
我已经搜索了 stackoverflow 但仍然找不到答案。感谢帮助。
与我为您的上一个问题提供的答案几乎相同,经过修改以匹配您的新 XML 格式:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="fileName" select="'updates.xml'" />
<xsl:param name="updates" select="document($fileName)" />
<xsl:variable name="updateItems" select="$updates/feed/entry" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="feed">
<xsl:copy>
<xsl:apply-templates select="@* | node()[not(self::entry)] |
entry[not(id = $updateItems/id)]" />
<xsl:apply-templates select="$updateItems" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当在第一个示例 XML 上运行(第二个示例 XML 保存为“updates.xml”)时,会生成:
<feed>
<author>
<firstName>f</firstName>
<lastName>l</lastName>
</author>
<date>2011-01-02 </date>
<entry>
<id>1</id>
<Name>aaa</Name>
<Content>XXX</Content>
</entry>
<entry>
<id>2</id>
<Name>newName</Name>
<Content>newContent</Content>
</entry>
<entry>
<id>3</id>
<Name>ccc</Name>
<Content>ZZZ</Content>
</entry>
</feed>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)