如何合并两个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中 我知道一点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进行任何修改的情况下执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
