java - 如何使用 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>
我该怎么做?提前致谢!
解决方案
如果您对可以使用的技术很灵活,这里是 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>
推荐阅读
- redux - 如何不以 redux 形式在验证函数中返回字符串
- python - python:为什么`type(super())`返回
? - javascript - Javascript - 如何按值从深度嵌套的数组中删除元素
- share - LinkedIn Share API 返回 400 错误 - “不支持所有者实体类型人员”
- sql - 如何在 OracleSQL 中减去 2 个时间戳(一个为日期,另一个为 HH24:MI 格式)并以 HH24:MI 格式获取结果
- reactjs - 当在屏幕上显示来自 React 的 useState 钩子的值并且除非在操作下才重新渲染时,使用哪种策略?
- python - Pytest + Coverage 生成错误的覆盖率
- java - 无法在 WebSphere Application Server 8.5.5 中运行 JSF 1.1 应用程序
- firebase - 项目 A 中的 Google App Engine 无法使用项目 B 中的 Firebase 云消息传递
- typescript - 如何更新 Firestore 数据库中的大量文档?