[英]XSLT 1.0 summarize of multiple nodes with different data
使用 XSLT 1.0,我想為PackageTypeCode
標簽內的所有唯一值創建新標簽。 新標簽的值應該是其各自出現的總和。
<?xml version="1.0" encoding="utf-8"?>
<TransportJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="11.1">
<Consignment>
<GoodsItem>
<PackageTypeCode>PE</PackageTypeCode>
</GoodsItem>
<GoodsItem>
<PackageTypeCode>PC</PackageTypeCode>
</GoodsItem>
<GoodsItem>
<PackageTypeCode>PE</PackageTypeCode>
</GoodsItem>
<GoodsItem>
<PackageTypeCode>PC</PackageTypeCode>
</GoodsItem>
</Consignment>
</TransportJob>
在示例中,我有兩個PackageTypeCode
是PC
和兩個PackageTypeCode
是PE
。 這些應返回以下內容:
<extraGoodsData>
<product type="PC">
<quantity>2</quantity>
</product>
<product type="PE">
<quantity>2</quantity>
</product>
</extraGoodsData>
最好的方法似乎是使用遞增變量創建多個變量。 但是,由於這些可能無限次出現,我不想編寫 >10 個變量並手動檢查每個唯一值。
在 XSTL 2.0 中,這對於例如fn:matches來說是微不足道的。
編輯:
<test>
<xsl:for-each select="GoodsItem[count(. | key('product_by_key', PackageTypeCode)[1]) = 1]">
<xsl:for-each select="key('product_by_key', PackageTypeCode)">
<xsl:sort select="PackageTypeCode" />
<xsl:value-of select="PackageTypeCode" />
</xsl:for-each>
</xsl:for-each>
</test>
這是我當前生成的代碼
<test>
<types>PC</types>
<types>PC</types>
<types>PC</types>
<types>PC</types>
<types>PE</types>
</test>
這是在正確的軌道上,但現在我需要以某種方式計算這些。 我不認為這是正確的方法,但我覺得我在正確的軌道上(注意我使用了一個不同的源文件,類型更多,所以這就是為什么有 5 種“類型”)
試試這種方式:
XSLT 1.0
<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:key name="item-by-pkg" match="GoodsItem" use="PackageTypeCode" />
<xsl:template match="/TransportJob">
<extraGoodsData>
<!-- create a group for each distinct PackageTypeCode -->
<xsl:for-each select="Consignment/GoodsItem[count(. | key('item-by-pkg', PackageTypeCode)[1]) = 1]">
<product type="{PackageTypeCode}">
<quantity>
<!-- count current group -->
<xsl:value-of select="count(key('item-by-pkg', PackageTypeCode))" />
</quantity>
</product>
</xsl:for-each>
</extraGoodsData>
</xsl:template>
</xsl:stylesheet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.