使用XSLT从XML跨多个节点对多个属性进行分组
问题描述:
我有以下XML。使用XSLT从XML跨多个节点对多个属性进行分组
如何在xslt 1.0中将我的元素按组名称分组?我需要根据communs_params地址,价格和增值将这些值分组。其他PARAMS(类型)必须在different_params
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<productsGrouppe>
<product>
<adressParam>
<parameter name="adress" >
<value>street 1 </value>
</parameter>
</adressParam>
<priceParam>
<parameter name="price" >
<value>100 EUR </value>
</parameter>
<parameter name="vat" >
<value> 1 </value>
</parameter>
</priceParam>
<deliveryParam>
<parameter name="type" >
<value> post </value>
</parameter>
</deliveryParam>
</product>
<product>
<adressParam>
<parameter name="adress" >
<value>street 2 </value>
</parameter>
</adressParam>
<priceParam>
<parameter name="price" >
<value>200 EUR </value>
</parameter>
<parameter name="vat" >
<value> 2 </value>
</parameter>
</priceParam>
<deliveryParam>
<parameter name="type" >
<value> E-mail </value>
</parameter>
</deliveryParam>
</product>
<product>
<adressParam>
<parameter name="adress" >
<value>street 1 </value>
</parameter>
</adressParam>
<priceParam>
<parameter name="price" >
<value>100 EUR </value>
</parameter>
<parameter name="vat" >
<value> 1 </value>
</parameter>
</priceParam>
<deliveryParam>
<parameter name="type" >
<value> selfcollectors </value>
</parameter>
</deliveryParam>
</product>
</productsGrouppe>
预期结果进行分组:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<productsGrouppe>
<product>
<commun_params>
<value>street 1 </value>
<value>100 EUR </value>
<value> 1 </value>
</commun_params>
<different_params>
<value> post </value>
<value> selfcollectors </value>
</different_params>
</product>
</productsGrouppe>
答
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="product_adress" match="adressParam/parameter[@name='adress']/value" use="."/>
<xsl:variable name="priceparam_price" select="priceParam/parameter[@name='price']/value"></xsl:variable>
<xsl:variable name="priceparam_vat" select="priceParam/parameter[@name='vat']/value"></xsl:variable>
<xsl:variable name="adressParam_adress" select="adressParam/parameter[@name='adress']/value"></xsl:variable>
<xsl:template match="productsGrouppe">
<product>
<xsl:apply-templates select="product/adressParam/parameter[@name='adress']/value[generate-id(.)=generate-id(key('product_adress',.)[1])]"/>
</product>
</xsl:template>
<xsl:template match="product">
<xsl:for-each select="key('product_adress', $adressParam_adress)">
<commun_params>
<value><xsl:value-of select="$adressParam_adress" /></value>
<value><xsl:value-of select="$priceparam_price" /></value>
<value><xsl:value-of select="$priceparam_vat" /></value>
</commun_params>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
而那是结果:
街道1个街道2
我建议你从这里开始:http://www.jenitennison.com/xslt/grouping/muenchian.html如果你运行,然后回来成为实现这个的实际问题。 –
这是我的尝试: – Jeeyong