Xslt 基于另一个xml循环的id创建新节点
我想添加一个基于的节点,但问题是类别在一个单独的文件中,而且我想循环查找所有基于的节点 让我举一个例子: category.xml:Xslt 基于另一个xml循环的id创建新节点,xslt,Xslt,我想添加一个基于的节点,但问题是类别在一个单独的文件中,而且我想循环查找所有基于的节点 让我举一个例子: category.xml: <ROOT> <GROUPITEM> <G_ID>1368</G_ID> <GROUP>Phone</GROUP> <PARENT>0</PARENT> </GROUPITEM> <GROUPITEM> <G_ID>1194<
<ROOT>
<GROUPITEM>
<G_ID>1368</G_ID>
<GROUP>Phone</GROUP>
<PARENT>0</PARENT>
</GROUPITEM>
<GROUPITEM>
<G_ID>1194</G_ID>
<GROUP>Apple</GROUP>
<PARENT>1368</PARENT>
</GROUPITEM>
<GROUPITEM>
<G_ID>1195</G_ID>
<GROUP>2019</GROUP>
<PARENT>1194</PARENT>
</GROUPITEM>
</ROOT>
item.xml:
<ROOT>
<SHOPITEM>
<PRODUCT_ID>96555</PRODUCT_ID>
<GROUP_ID>1195</GROUP_ID>
<PRODUCT_NAME>Apple iPhone 8 Plus</PRODUCT_NAME>
</SHOPITEM>
</ROOT>
示例输出:
<ROOT>
<SHOPITEM>
<PRODUCT_ID>96555</PRODUCT_ID>
<GROUP_ID>1195</GROUP_ID>
<PRODUCT_NAME>Apple iPhone 8 Plus</PRODUCT_NAME>
<CATEGORY>Phone | Apple | 2019</CATEGORY>
</SHOPITEM>
</ROOT>
简单地说,我正在寻找一种在item.xml中创建节点的方法,并在这里根据item.xml从category.xml中添加值:在category.xml中搜索相同的节点->如果找到,添加它->根据if success搜索更多添加分隔符+值->循环。尝试类似未测试的方法: XSLT2.0
您的处理器是否支持XSLT 2.0?是的,XSLT 2.0或3.0并不重要。您是一个天才,在阅读了其他人的代码后,这看起来很简单。您将如何修改代码以将节点保留在输出中?我试过了,但它重复了我相信添加身份转换模板应该会起作用。如果源XML中不存在,则无法复制。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="group" match="GROUPITEM" use="G_ID" />
<xsl:template match="SHOPITEM">
<xsl:copy>
<xsl:copy-of select="*"/>
<CATEGORY>
<xsl:apply-templates select="key('group', GROUP_ID, document('category.xml'))"/>
</CATEGORY>
</xsl:copy>
</xsl:template>
<xsl:template match="GROUPITEM">
<xsl:variable name="parent" select="key('group', PARENT)" />
<xsl:if test="$parent">
<xsl:apply-templates select="$parent"/>
<xsl:text> | </xsl:text>
</xsl:if>
<xsl:value-of select="GROUP"/>
</xsl:template>
</xsl:stylesheet>