2016-04-07 10 views
-3

Mantıksal wrt'den xmls'e ilişkin bir yardıma ihtiyacım var. Dört düğümleri aşağıda gibi olması: Aynı yolla iki xml düğümünü birleştirmek ve toplamlarını yazdırmak

<Root> 
<Element> 
<ElementId>Fruits</ElementId> 
<ElementDes>Apple</ElementDes> 
<ElementValue>100</ElementValue> 
</Element> 
<Element> 
<ElementId>Fruits</ElementId> 
<ElementDes>Mango</ElementDes> 
<ElementValue>200</ElementValue> 
</Element> 
<ElementId>Vegetables</ElementId> 
<ElementDes>Potato</ElementDes> 
<ElementValue>300</ElementValue> 
</Element> 
<Element> 
<ElementId>Vegetables</ElementId> 
<ElementDes>Brinjal</ElementDes> 
<ElementValue>400</ElementValue> 
</Element> 
</Root> 

Ben aşağıda çıktıyı gerekir: (Sum Eleman kimlikleri aynı türden):

<Root> 
<Element> 
<ElementId>Fruits</ElementId> 
<ElementDes>AppleMango</ElementDes> 
<ElementValue>300</ElementValue> 
</Element> 
<ElementId>Vegetables</ElementId> 
<ElementDes>PotatoBrinjal</ElementDes> 
<ElementValue>700</ElementValue> 
</Element> 
</Root> 

kimse bana bu konuda yardımcı olur musunuz?

+0

. Örneğin: https://docs.oracle.com/javase/tutorial/jaxp/stax/index.html – mrbela

+0

XSLT 2.0 yaklaşımı için bkz. Https://www.w3.org/TR/xslt20/#grouping-examples. XSLT 2.0'ı, Java'yı Sakson 9 ile birlikte kullanabilirsiniz. –

+0

Eh, etiketler XSLT'yi kullandığını zaten önerdi. @mrbela :-) – Vampire

cevap

1

varsayarsak senin girdi verileri geçerli XML olurdu (sizin örnek değildir), bu beklenen bir sonuç üretecektir: Java xml ile çalışmak için çerçeveler bir sürü vardır

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="Root"> 
     <xsl:copy> 
     <xsl:for-each-group select="Element" group-by="ElementId"> 
      <Element> 
       <xsl:apply-templates select="@* | ElementId"/> 
       <ElementDes><xsl:value-of select="current-group()/ElementDes" separator=""/></ElementDes> 
       <ElementValue><xsl:value-of select="sum(current-group()/ElementValue)"/></ElementValue> 
      </Element> 
     </xsl:for-each-group> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Yanıtınız için teşekkür ederiz! :) –