问题描述
我有两个结构相似的XML文件,希望根据其属性ID值合并到一个文件中。如果Id值已经存在,则代码应替换其他属性,否则仅附加一个元素。您能建议我可以使用哪个Java XML解析器库吗?
因此,我感谢任何给我提供示例示例的人。预先感谢。
XML A:
<Returns>
<Return Id="1001" Metadatafields="Code" MandatoryFields="Code1"/>
</Returns>
XML B:
<Returns>
<Return Id="1000" Metadatafields="BankCode" MandatoryFields="BankCode"/>
<Return Id="1001" Metadatafields="BankCode" MandatoryFields="BankCode1"/>
<Return Id="1002" Metadatafields="BankCode" MandatoryFields="BankCode2"/>
<Return Id="1003" Metadatafields="BankCode" MandatoryFields="BankCode3"/>
</Returns>
输出:
<Returns>
<Return Id="1000" Metadatafields="BankCode" MandatoryFields="BankCode"/>
<Return Id="1001" Metadatafields="Code" MandatoryFields="Code1"/>
<Return Id="1002" Metadatafields="BankCode" MandatoryFields="BankCode2"/>
<Return Id="1003" Metadatafields="BankCode" MandatoryFields="BankCode3"/>
</Returns>
解决方法
在XSLT 3.0中:
<xsl:template name="xsl:initial-template">
<Records>
<xsl:merge>
<xsl:merge-source for-each-source="doc('A.xml'),doc('B.xml')"
streamable="yes"
select="Returns/Return">
<xsl:merge-key select="@Id" order="ascending"/>
</xsl:merge-source>
<xsl:merge-action>
<xsl:copy-of select="current-merge-group()[last()]"/>
<xsl:merge-action>
</xsl:merge>
</Records>
</xsl:template>