Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Xml Muenchian分组样式表返回重复的未分组节点_Xml_Xslt_Xpath_Xalan_Muenchian Grouping - Fatal编程技术网

Xml Muenchian分组样式表返回重复的未分组节点

Xml Muenchian分组样式表返回重复的未分组节点,xml,xslt,xpath,xalan,muenchian-grouping,Xml,Xslt,Xpath,Xalan,Muenchian Grouping,我试图使用ApacheXalan按产品ID对产品变体列表进行分组。以下是一个输入示例: ***输入1.xml*** 1. 100 10 1. 100 8. 1. 150 12 2. 200 7. 3. 190 22 3. 180 13 3. 170 5. 3. 170 7. 3. 180 12 然后,我使用shell中的以下命令: xalan-in-input_1.xml-xsl-muenchian_1.xsl-out-output_1.xml-indent 4 要使用以下样式表转换输入:

我试图使用ApacheXalan按产品ID对产品变体列表进行分组。以下是一个输入示例:

***输入1.xml***

1.
100
10
1.
100
8.
1.
150
12
2.
200
7.
3.
190
22
3.
180
13
3.
170
5.
3.
170
7.
3.
180
12
然后,我使用shell中的以下命令:

xalan-in-input_1.xml-xsl-muenchian_1.xsl-out-output_1.xml-indent 4
要使用以下样式表转换输入:

***muenchian_1.xml***

希望获得以下输出:

***应为\u 1.xml***

1.
100
10
100
8.
150
12
2.
200
7.
3.
190
22
180
13
170
5.
170
7.
180
12
但我得到的却是:

***输出\u 1.xml***

1.
1.
100
10
1.
100
8.
1.
150
12
1.
100
8.
1.
150
12
2.
2.
200
7.
3.
3.
190
22
3.
180
13
3.
170
5.
3.
170
7.
3.
180
12
3.
180
13
3.
170
5.
3.
170
7.
3.
180
12
正如您所看到的,当变体被正确分组时,除了各自组中的第一个变体之外,所有变体都会重复两次,一次在分组内,一次在分组外


为什么会这样?如何修复它呢?

您需要阻止第二、第三、第四。。组中的变量,否则默认标识转换将复制它们:

<xsl:template match="/root/variant[productId][not(generate-id() = generate-id(key('variants-by-productId', productId)[1]))]"/>


您还可以告诉我为什么标识转换没有复制第一个吗?对于第一个,您已经使用
xsl:template match=“/root/variant[productId][generate-id()=generate id(key('variants-by-productId',productId)[1])”设置了模板,以输出包装器
产品列表组,因此,很明显,身份转换不会像任何
match=“variant”
match=“/root/variant…”一样(默认情况下,
节点()可以匹配)具有较低的优先级。但是谓词
generate-id()=generate-id(key('variants-by-productId',productId)[1])
基本上是
的XSLT 1方式。是键(“…”,…)[1]