当前位置: 首页 > 知识库问答 >
问题:

如何合并两个XML文件

姬博瀚
2023-03-14

我有两个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>

使现代化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>

实际上,我想使用更新。xml来更新原始。xml:

>

  • update.xml中的新员工应该被添加到original.xml

    在更新中修改了员工信息。xml应覆盖相应的员工节点。

    我对XSLT略知一二,但我的知识还不足以找出适合合并的XSLT。

  • 共有1个答案

    雍骏俊
    2023-03-14

    请尝试一下:

    <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作为输入并使用更新运行时。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更新声明为参数,因此如果更新位于名为“update.xml”以外的文件中,或者您想直接将更新XML传递进来,您可以这样做,而无需对XSLT进行任何修改

     类似资料:
    • 我有两个xml文件,需要使用XSLT将它们合并为一个。 第一个XML是(原始的): 第二个XML(更新数据)如下所示: 所需的合并结果-使用第二个XML更新第一个: 我已经搜索了stackoverflow,但仍然找不到答案。谢谢你的帮助。

    • 我正在尝试通过字符串将根数据合并为一个,但无法这样做。请帮助。

    • 问题内容: 如何使用Java合并两个WAV文件? 我试过了,但是没有正常工作,他们还有其他方法吗? 问题答案: 如果直接使用wav文件的字节,则可以在任何编程语言中使用相同的策略。对于此示例,我将假设两个源文件具有相同的比特率/数字通道,并且具有相同的长度/大小。(否则,您可能可以在开始合并之前对其进行编辑)。 首先看一下WAV规范,我在斯坦福课程网站上找到了一个很好的人: 常见的标头长度为44或

    • 问题内容: 文件1具有5个字段ABCDE,其中字段A是整数 文件2具有3个字段AFG 文件1中的行数比文件2中的行数大得多(20 ^ 6到5000) 文件1中A的所有条目都出现在文件2中的A字段中 我喜欢按字段A合并两个文件并携带F和G 所需的输出是ABCDEFG 例 文件1 文件2 所需的输出 问题答案: $ awk ‘FNR==NR{a[$1]=$2 FS $3;next}{ print $0

    • 问题内容: 我有第一个json: 第二个: 我想合并/合并两个数据数组,例如: (我现在不在乎)。 如何快速简便地做到这一点?这是我的尝试: 但是会引发异常: 问题答案: JArray dataOfJson1=json1.SelectToken(“data”);

    • 我已经看到了如何用xslt合并两个xml文件或如何-can-I-merge-this-two-xml-files-using-xslt下的各种问题,但这些示例不处理文本输出,也不处理对“default”的静态引用。xml'。 我正在尝试生成一个由默认值生成的C headerfile。被目标修改的xml。xml。 我正在使用xsltproc作为xslt处理器,并希望能够执行xslproc merg。