Xslt 有条件地从外部XML文件复制内容

Xslt 有条件地从外部XML文件复制内容,xslt,Xslt,我有两个需要合并的XML文件(XML1和XML2)。我需要根据属性是负还是正,有条件地将内容从XML2添加到XML1中 例XML1 <containers> <basket1> </basket1> <basket2> </basket2> </containers> 例XML 2 <fruit> <apple attr="1"/> <app

我有两个需要合并的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”值的内容

我相信有一个很好的解决办法,但我在如何将这些零碎的东西组合在一起上还没有定论。感谢您的帮助!
干杯

现在还不清楚它应该有多通用,所以它可能并不完全是您所需要的

<?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 &gt;= 0]" />
                </xsl:when>
                <xsl:when test="$type = 'negative'">
                    <xsl:copy-of select="$fruit/*[@attr &lt; 0]" />
                </xsl:when>
            </xsl:choose>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

我希望XML1是输入文件,XML2是加载到变量中的文件。
应该做一些改进,比如检查in属性是否真的是一个数字等。

您熟悉Xpath吗?您使用的是什么语言(c/c++/c#/java等)?编辑:刚刚看到标记,所以您想单独使用xslt吗?@Ron.B.I我想使用xslt,但这将是Java应用程序中执行的一系列转换的第一步。如果Java能够增强功能,那就没问题了。经过编辑,我使用Saxon9作为解析器。我对XSLT1.0或2.0漠不关心。如果您想在Java中使用,我可以帮助您,我不熟悉Saxon 9解析器,但是,您熟悉Xpath/Xquery吗?@Ron.B.I非常感谢您的帮助,但是如果我长期倾向于XSLT解决方案,请不要生气。我非常熟悉XPath。我已经让它为我工作了。非常感谢。如何确保basket1和basket2上的任何属性也被复制?正在为我抛出有关属性位的错误。我已经让它工作了。回答接受!