[英]How to merge two XML files with certain condition using StAX
例如,假设我们有两个 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 与第一个文件中的学生 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>
我该怎么做? 提前致谢!
如果您对可以使用的技术很灵活,这里是 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>
你的问题用 Java 标记,所以我假设它是你正在使用的。
有两种方法可以解决这个问题,一种是使用 JAXB——它是一个标准的 Java 库,可以促进 XML 与 Java 对象之间的映射。 您的文件看起来很有条理,所以这就是我的建议。 您可以基于 XML 创建模型类并使用该库将文件转换为 Java 对象。 您还可以基于 XML 文件生成模式并将该模式传递给 JAXB,它会为您生成模型类。
第二个选项是使用DocumentBuilder
类解析文件并手动插入节点。
这两个工具都有详细的文档,可以很容易地在线查找,所以我不会粘贴代码示例。
我不会推荐其他人为这么简单的事情建议的 XSLT 方法。 XSLT 难以阅读和维护,而且不常用。 无论如何,以编程方式操作 XML 肯定会在某些时候派上用场。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.