【发布时间】:2018-05-21 09:17:34
【问题描述】:
您好,我必须在以下条件下合并 xml 文件:
复制新文件的所有现有节点,然后与旧文件值合并。 例如:
文件 abc.xml
<?xml version="1.0"?>
<schedule>
<Item Id="2">
<measurements>
<measurement>Alpha</measurement>
</measurements>
</Item>
<Item Id="9">
<measurements>
<measurement>Gamma</measurement>
</measurements>
</Item>
</schedule>
文件 xyz.xml
<?xml version="1.0"?>
<schedule>
<Item Id="1">
<measurements>
<measurement>Alpha</measurement>
</measurements>
</Item>
<Item Id="4">
<measurements>
<measurement>Beta</measurement>
</measurements>
</Item>
</schedule>
xslt 逻辑文件: 逻辑.xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="no" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Item">
<xsl:variable name="match" select="document('./abc.xml')/schedule/Item[measurements/measurement=current()/measurements/measurement]"/>
<xsl:choose>
<xsl:when test="$match">
<xsl:copy-of select="$match"/>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
使用的命令:
xsltproc logic.xslt xyz.xml > output.xml
预期输出:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schedule>
<Item Id="2">
<measurements>
<measurement>Alpha</measurement>
</measurements>
</Item>
<Item Id="4">
<measurements>
<measurement>Beta</measurement>
</measurements>
</Item>
<Item Id="9">
<measurements>
<measurement>Gamma</measurement>
</measurements>
</Item>
</schedule>
但实际与预期不同,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schedule>
<Item Id="2">
<measurements>
<measurement>Alpha</measurement>
</measurements>
</Item>
<Item Id="9">
<measurements>
<measurement>Gamma</measurement>
</measurements>
</Item>
</schedule>
它错过了新 xml 文件中的节点。
【问题讨论】: