Xml 基于多重分组和加法终止的muenchian和
我想使用一些xslt和xml获得更好的xml文件 请提供XSLT1.0支持。非常感谢Xml 基于多重分组和加法终止的muenchian和,xml,xslt,grouping,muenchian-grouping,Xml,Xslt,Grouping,Muenchian Grouping,我想使用一些xslt和xml获得更好的xml文件 请提供XSLT1.0支持。非常感谢 <!-- entry xml --> <Pallets> <Pallet> <PalletNumber>2</PalletNumber> <Product>1</Product> <Quantity>2</Quantity> </Pallet>
<!-- entry xml -->
<Pallets>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>4</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet></Pallets>
2.
1.
2.
2.
1.
4.
2.
2.
1.
3.
1.
2.
4.
2.
2.
我需要汇总每个托盘编号和产品的数量(参见第一个节点
下面)。此外,序列号也需要在
基于xml中第一次出现的palletnumber值。结果应
看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<!-- upgraded xml -->
<Pallets><Pallet>
<PalletNumber>2_1</PalletNumber>
<Product>1</Product>
<Quantity>6</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2_2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3_1</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4_1</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet></Pallets>
2_1
1.
6.
2_2
2.
1.
3_1
1.
2.
4_1
2.
2.
不能100%确定新的托盘编号的逻辑是否正确(这里是凌晨3:00),但是下面的XSLT 1.0返回了所需的输出和给定的输入
XML输入
<Pallets>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>4</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet>
</Pallets>
<Pallets>
<Pallet>
<PalletNumber>2_1</PalletNumber>
<Product>1</Product>
<Quantity>6</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2_2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3_1</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4_1</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet>
</Pallets>
2.
1.
2.
2.
1.
4.
2.
2.
1.
3.
1.
2.
4.
2.
2.
XSLT1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kPalletProduct" match="Pallet" use="concat(PalletNumber,'-',Product)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Pallets">
<xsl:copy>
<xsl:for-each select="Pallet[generate-id()=generate-id(key('kPalletProduct',concat(PalletNumber,'-',Product))[1])]">
<xsl:copy>
<PalletNumber>
<xsl:value-of select="concat(PalletNumber,'_',count(preceding::Pallet[PalletNumber=current()/PalletNumber and not(Product=current()/Product)][1])+1)"/>
</PalletNumber>
<Product>
<xsl:value-of select="Product"/>
</Product>
<Quantity>
<xsl:value-of select="sum(key('kPalletProduct',concat(PalletNumber,'-',Product))/Quantity)"/>
</Quantity>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<Pallets>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>1</Product>
<Quantity>4</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet>
</Pallets>
<Pallets>
<Pallet>
<PalletNumber>2_1</PalletNumber>
<Product>1</Product>
<Quantity>6</Quantity>
</Pallet>
<Pallet>
<PalletNumber>2_2</PalletNumber>
<Product>2</Product>
<Quantity>1</Quantity>
</Pallet>
<Pallet>
<PalletNumber>3_1</PalletNumber>
<Product>1</Product>
<Quantity>2</Quantity>
</Pallet>
<Pallet>
<PalletNumber>4_1</PalletNumber>
<Product>2</Product>
<Quantity>2</Quantity>
</Pallet>
</Pallets>
2_1
1.
6.
2_2
2.
1.
3_1
1.
2.
4_1
2.
2.
+1这是一个很好的第一个问题,尽管你已经尝试过的例子会很好。