如何合并两个XML文件

我有两个xml文件,需要合并到一个xml中.这是一个例子:

orginal.xml文件

<employees>
  <employee id="1">
    <name> Name1 </name>
    <email> email1 <email>
  </employee>
  <employee id="2">
    <name> Name2 </name>
    <email> email2 <email>
  </employee>
</employees>

update.xml文件

<employees>
        <employee id="2">
            <name> Name2 </name>
            <email> email_New <email>
        </employee>
        <employee id="3">
            <name> Name3 </name>
            <email> email3 <email>
        </employee>
</employees>

它们应该合并到一个xml文件,如下所示:

<employees>
  <employee id="1">
    <name> Name1 </name>
    <email> email1 <email>
  </employee>  
  <employee id="2">
    <name> Name2 </name>
    <email> email_New <email>
  </employee>
  <employee id="3">
    <name> Name3 </name>
    <email> email3 <email>
  </employee>
</employees>

实际上,我想使用update.xml来更新orginal.xml:

>应将update.xml中的新员工添加到original.xml中
> update.xml中修改的员工信息应覆盖相应的员工节点.

我知道一点XSLT,但我的知识还不足以找出合并的正确XSLT.

请尝试一下:
<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="'update.xml'" />
  <xsl:param name="updates" select="document($fileName)" />

  <xsl:variable name="updateEmployees" select="$updates/employees/employee" />

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="employees">
    <xsl:copy>
      <xsl:apply-templates select="employee[not(@id = $updateEmployees/@id)]" />
      <xsl:apply-templates select="$updateEmployees" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

当您使用第一个XML作为输入并且update.xml存在于同一文件夹中时,会产生:

<employees>
  <employee id="1">
    <name> Name1 </name>
    <email>
      email1 </email>
  </employee>
  <employee id="2">
    <name> Name2 </name>
    <email>
      email_New
    </email>
  </employee>
  <employee id="3">
    <name> Name3 </name>
    <email>
      email3
    </email>
  </employee>
</employees>

fileName和updates被声明为参数,因此如果更新位于名为“update.xml”以外的文件中,或者您希望直接传递更新XML,则可以在不对XSLT进行任何修改的情况下执行此操作.

相关文章

引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满足人的生产生活需要而产生的。具体...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满...
(点击上方公众号,可快速关注) 公众号:smart_android 作者:耿广龙|loonggg 点击“阅读原文”,可查看...
一、xml与xslt 相信所有人对xml都不陌生,其被广泛的应用于数据数据传输、保存与序列化中,是一种极为强...