加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何合并两个XML文件

发布时间:2020-12-16 07:56:44 所属栏目:百科 来源:网络整理
导读:我有两个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
我有两个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进行任何修改的情况下执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读