首页 > 解决方案 > 如何使用 StAX 合并具有特定条件的两个 XML 文件

问题描述

例如,假设我们有两个 XML 文件:

“1.xml”

<School>
   <Stdent id="1">
      <Name>Jhon</Name>
      <Age>12</Age>
      <Grade>7</Grade>
   </Student>
   <Stdent id="2">
      <Name>Mike</Name>
      <Age>11</Age>
      <Grade>8</Grade>
   </Student>
</School>

“2.xml”

<School>
   <Stdent id="1">
      <Name>Jhon</Name>
      <Age>13</Age>
      <Grade>9</Grade>
   </Student>
   <Stdent id="3">
      <Name>Ann</Name>
      <Age>11</Age>
      <Grade>10</Grade>
    </Student>
</School>

对于合并文件,条件是如果第二个文件中的学生 id 与第一个文件中的一个匹配,则将其从第二个文件中放入。合并后的文件应如下所示:

“合并.xml”

<School>
   <Stdent id="1">
      <Name>Jhon</Name>
      <Age>13</Age>
      <Grade>9</Grade>
   </Student>
   <Stdent id="2">
      <Name>Mike</Name>
      <Age>11</Age>
      <Grade>8</Grade>
   </Student>
   <Stdent id="3">
      <Name>Ann</Name>
      <Age>11</Age>
      <Grade>10</Grade>
    </Student>
</School>

我该怎么做?提前致谢!

标签: javaxmlmergestax

解决方案


如果您对可以使用的技术很灵活,这里是 XSLT 3.0 解决方案:

<xsl:merge>
  <xsl:merge-source for-each-source="'xml1.xml', 'xml2.xml'"
                    select="//Stdent">
    <xsl:merge-key select="@id"/>
  </xsl:merge-source>
  <xsl:merge-action>
    <xsl:copy-of select="current-merge-group()[last()]"/>
  </xsl:merge-action>
</xsl:merge>

推荐阅读