Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 基于另一个xml循环的id创建新节点_Xslt - Fatal编程技术网

Xslt 基于另一个xml循环的id创建新节点

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<

我想添加一个基于的节点,但问题是类别在一个单独的文件中,而且我想循环查找所有基于的节点

让我举一个例子:

category.xml:

<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>