合并两个xml文件并删除重复的元素

时间:2012-10-19 19:43:42

标签: xml xslt

我想在使用xsl删除具有重复名称的条目(即使值不同)的同时连接两个xml文件。请参阅示例文件。非常感谢你的帮助。

File1.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
  <entry>
    <name>xxx</name>
    <value>123</value>
  </entry>
  <entry>
    <name>yyy</name>
    <value>456</value>
  </entry>
  <entry>
    <name>zzz</name>
    <value>789</value>
  </entry>
</archive>

File2.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
  <entry>
    <name>xxx</name>
    <value>2468</value>
  </entry>
  <entry>
    <name>ttt</name>
    <value>13579</value>
  </entry>
</archive>

生成的文件应如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<archive>
  <entry>
    <name>xxx</name>
    <value>123</value>
  </entry>
  <entry>
    <name>yyy</name>
    <value>456</value>
  </entry>
  <entry>
    <name>zzz</name>
    <value>789</value>
  </entry>
  <entry>
    <name>ttt</name>
    <value>13579</value>
  </entry>
</archive>

1 个答案:

答案 0 :(得分:3)

此转化

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pDoc1" select="document('file:///c:/temp/delete/file1.xml')"/>
 <xsl:param name="pDoc2" select="document('file:///c:/temp/delete/file2.xml')"/>

 <xsl:template match="/">
  <xsl:apply-templates select="$pDoc1/*"/>
 </xsl:template>

 <xsl:template match="/*">
  <archive>
   <xsl:copy-of select="node()"/>
   <xsl:copy-of select="$pDoc2/*/entry[not(name = current()/*/name)]"/>
  </archive>
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)并具有包含此内容的文件(如提供的):

C:\ TEMP \删除\ file1.xml

<archive>
  <entry>
    <name>xxx</name>
    <value>123</value>
  </entry>
  <entry>
    <name>yyy</name>
    <value>456</value>
  </entry>
  <entry>
    <name>zzz</name>
    <value>789</value>
  </entry>
</archive>

C:\ TEMP \删除\ file2.xml

<archive>
  <entry>
    <name>xxx</name>
    <value>2468</value>
  </entry>
  <entry>
    <name>ttt</name>
    <value>13579</value>
  </entry>
</archive>

生成想要的正确结果

<archive>
   <entry>
      <name>xxx</name>
      <value>123</value>
   </entry>
   <entry>
      <name>yyy</name>
      <value>456</value>
   </entry>
   <entry>
      <name>zzz</name>
      <value>789</value>
   </entry>
   <entry>
      <name>ttt</name>
      <value>13579</value>
   </entry>
</archive>
相关问题