我有两个具有以下格式的 XML 文件
文件1
<info>
<organization_id>123</organization_id>
<total_patients>5</total_patients>
</info>
<patients>
<patient>
<guid>1111</guid>
</patient>
<patient>
<guid>2222</guid>
</patient>
</patients>
文件 2
<info>
<organization_id>456</organization_id>
<total_patients>10</total_patients>
</info>
<patients>
<patient>
<guid>3333</guid>
</patient>
<patient>
<guid>4444</guid>
</patient>
</patients>
我想将两个文件合二为一,格式如下
输出文件
<info>
<total_patients>15</total_patients>
</info>
<organizations>
<organization>
<organization_id>123</organization_id>
<patients>
<patient>
<guid>1111</guid>
</patient>
<patient>
<guid>1111</guid>
</patient>
</patients>
</organization>
<organization>
<organization_id>456</organization_id>
<patients>
<patient>
<guid>4444</guid>
</patient>
<patient>
<guid>5555</guid>
</patient>
</patients>
</organization>
</organizations>
如果有任何建议,我将不胜感激。我一直在搜索谷歌,找不到任何类似的东西。谢谢
进行一些调整以使您的输入和预期输出格式正确,我建议使用以下 XSLT 2.0 解决方案。调整是:
- 将每个输入文档封装到单个节点中。
- 将预期的输出文档封装到单个节点中。
因此,要转换以下文档....
<organization>
<info>
<organization_id>123</organization_id>
<total_patients>5</total_patients>
</info>
<patients>
<patient>
<guid>1111</guid>
</patient>
<patient>
<guid>2222</guid>
</patient>
</patients>
</organization>
包括以下共同输入文档...
<organization>
<info>
<organization_id>456</organization_id>
<total_patients>10</total_patients>
</info>
<patients>
<patient>
<guid>3333</guid>
</patient>
<patient>
<guid>4444</guid>
</patient>
</patients>
</organization>
...将在您调用 XSLT 引擎时将其作为名称为“org2”的参数进行引用,应用以下 XSLT2 转换...
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0"
exclude-result-prefixes="xsl xs fn">
<xsl:output indent="yes" encoding="UTF-8" />
<xsl:param name="org2" />
<xsl:variable name="org2-doc" select="document($org2)" />
<xsl:template match="/">
<output>
<info>
<total_patients>
<xsl:number value="organization/info/total_patients +
$org2-doc/organization/info/total_patients" />
</total_patients>
</info>
<organizations>
<xsl:apply-templates />
<xsl:apply-templates select="$org2-doc/*" />
</organizations>
</output>
</xsl:template>
<xsl:template match="organization">
<organization>
<organization_id>
<xsl:number value="info/organization_id" />
</organization_id>
<xsl:copy-of select="patients" />
</organization>
</xsl:template>
</xsl:stylesheet>
... 产生期望的结果....
<?xml version="1.0" encoding="UTF-8"?>
<output>
<info>
<total_patients>15</total_patients>
</info>
<organizations>
<organization>
<organization_id>123</organization_id>
<patients>
<patient>
<guid>1111</guid>
</patient>
<patient>
<guid>2222</guid>
</patient>
</patients>
</organization>
<organization>
<organization_id>456</organization_id>
<patients>
<patient>
<guid>3333</guid>
</patient>
<patient>
<guid>4444</guid>
</patient>
</patients>
</organization>
</organizations>
</output>