0

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

文件1.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>

文件2.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>
4

1 回答 1

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\delete\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\delete\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>
于 2012-10-19T20:16:39.243 回答