Xslt 有条件地从外部XML文件复制内容
我有两个需要合并的XML文件(XML1和XML2)。我需要根据属性是负还是正,有条件地将内容从XML2添加到XML1中 例XML1Xslt 有条件地从外部XML文件复制内容,xslt,Xslt,我有两个需要合并的XML文件(XML1和XML2)。我需要根据属性是负还是正,有条件地将内容从XML2添加到XML1中 例XML1 <containers> <basket1> </basket1> <basket2> </basket2> </containers> 例XML 2 <fruit> <apple attr="1"/> <app
<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 >= 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是加载到变量中的文件。
应该做一些改进,比如检查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上的任何属性也被复制?正在为我抛出有关属性位的错误。我已经让它工作了。回答接受!