我有2个XML文件需要合并在一起(XML1和XML2)。我需要根据属性是负还是正,有条件地将XML2中的内容添加到XML1中。
实施例。 XML1
<containers>
<basket1>
</basket1>
<basket2>
</basket2>
</containers>
实施例。 XML 2
<fruit>
<apple attr="1"/>
<apple attr="-1"/>
</fruit>
实施例。输出
<containers>
<basket1>
<apple attr="1">
</basket1>
<basket2>
<apple attr="-1"/>
</basket2>
</containers>
如您所见,我不想修改XML1的结构accept,以根据“attr”的值添加内容。
我确信这方面有一个很好的解决方案,但我正在绘制如何将这些零碎的东西放在一起的空白。任何帮助表示赞赏! 干杯!
答案 0 :(得分:3)
目前尚不清楚应该有多少通用 - 所以可能并不完全是你需要的。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="fruit" select="document('XML2.xml')/fruit" />
<xsl:template match="/containers">
<containers>
<xsl:apply-templates select="node()[1]">
<xsl:with-param name="type" select="'positive'" />
</xsl:apply-templates>
<xsl:apply-templates select="node()[2]">
<xsl:with-param name="type" select="'negative'" />
</xsl:apply-templates> </containers>
</xsl:template>
<xsl:template match="node()">
<xsl:param name="type" />
<xsl:copy>
<xsl:choose>
<xsl:when test="$type = 'positive'">
<xsl:copy-of select="$fruit/*[@attr >= 0]" />
</xsl:when>
<xsl:when test="$type = 'negative'">
<xsl:copy-of select="$fruit/*[@attr < 0]" />
</xsl:when>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我希望XML1是输入文件,XML2我加载到变量中。 应该做一些改进,比如检查属性是否真的是一个数字等。