# Summe bilden wenn bestimmte Felder inhaltlich übereinstimmen



## No_Kind (23. Aug 2007)

Hallo Zusammen!


Ich habe eine XML-Datei.  Dabei soll ich nach einem Feld <Zentrale>...</Zentrale> suchen.
wenn es mehrere Zentralen mti der gleichen Nummer gibt , sollen die Summe gebildet wird. 

Wie könnte ich dies realisieren? Bitte jetzt nicht sagen sax oder jdom verwenden. Würde mich freuen wenn ich mir da näher behilflich sein könntet. 


danke an alle die helfen! 



Gruss


----------



## mikachu (23. Aug 2007)

gib doch gleich die summe aller zentralen mit der gleichen nummer zurück...

das ist wiedereinmal ein sehr schönes thema für XPath


----------



## No_Kind (23. Aug 2007)

sorry wenn ich mich jetzt bischen blöd anstelle aber wie würde ich herausfindne ob zentralen die gleich nummer haben?


ich würde es mit 2 forschleifen realisieren. 


Wäre dankbar ich ein bissel Codeschnipsel erhalten könnte


----------



## Guest (23. Aug 2007)

gleiche Zentralen finde ich so :




```
int zaehl=0;
          int inhalt[] = new int[filialen.length];
          //Array mit nullen füllen.
          for(int i=0;i<inhalt.length;i++)
          {
              inhalt[i]=0;
          }
          
          String[] zweiter1=new String[filialen.length];
          
           for(int i=1;i<filialen.length;i++)
          {
              //Die Mitgliedsnr muss aus dem Datensatz rausgenommen werden   
               String[] erster1 = (filialen[i]).split("<ZENTR>");
               zweiter1[i] = ((erster1[1]).split("</ZENTR>"))[0];
           }
          
          
        for(int i=1;i<filialen.length;i++)
          {
           
            if(inhalt[i] ==  0)
            {
            zaehl++;
            inhalt[i] =zaehl;
            
            }
            for(int j=i+1;j<filialen.length;j++)
            {

                if(zweiter1[i].equalsIgnoreCase(zweiter1[j]))
                  inhalt[j] =zaehl;
            }
           
          }
```

Dabei krieg ich dann am Ende eine Liste mit z.b 

1, 2, 1,3, 4 

jetzt kann ich natürlich alle 1 zusammen zählen und so weiter. 
[/code]


----------



## mikachu (23. Aug 2007)

parse das xml mit meinetwegen nem SAX parser und registriere nen eigenen Defaulthandler, welcher dir bei gefundenem zentrale-element das attribut ausliest und in einer map abspeichert. falls der eintrag schon da ist, dann erhöhe den value um die nummer der zentrale...


----------



## Gast (23. Aug 2007)

und wo würde hier XPath einsetzen?


----------



## Gast (23. Aug 2007)

Dabei ist zu sagen das die Summe nicht die Zentralnummer wäre, 

sondern ein weiteres Feld z.b <Sum> 125,00</Sum>


----------



## mikachu (23. Aug 2007)

dann erstmal die vorkommenden zentrale-nummern irgendwo hinspeichern, und dann mit XPath die summe der einzelnen zentale-nummern ermitteln.

alternativ:
alles gleich in einem durchlauf machen.


ein wenig xml-code wäre gar nicht übel an diesem punkt


----------



## Gast (23. Aug 2007)

XML-Struktur:
<start>
<daten1>....
<Sum>125</Sum>
<Zentr>123456</Zentr>
</daten1>
<daten2>....
<Zentr>123456</Zentr>
<Sum>25</Sum>
</daten2>
<daten3>....
<Zentr>453155</Zentr>
<Sum>0</Sum>
</daten3>
</start>


----------



## Gast (23. Aug 2007)

Jetzt müsste natürlich die Summen von daten1 und daten2 zusammengefasst werden, da die Zentralnr(hier:123456) gleich ist...


----------



## Gast (23. Aug 2007)

wie würde der code aussehen wenn ich xpath verwenden würde????


ein wenig sourcecode wäre garnicht verkehrt an dieser stelle


----------



## mikachu (23. Aug 2007)

hmm, habs mir ehrlich gesagt leichter vorgestellt 

machs lieber mit nem sax parser und nem eigenen handler, der ne map füllt... geht einfacher


----------



## Gast (23. Aug 2007)

wofür ist dann xpath gut?


Ich könnte ja das zusammenfassen per Hand lösen aber das schreiben der werte kann ich doch dann über xpath laufen lassen oder???


----------



## Gast (23. Aug 2007)

mika, also wenn du das nicht weisst  dann wohl kaum ein anderer hier


----------



## mikachu (23. Aug 2007)

Die XML Path Language (XPath) ist eine vom W3-Konsortium entwickelte Anfragesprache, um Teile eines XML-Dokumentes zu adressieren.

das dürfte funktionieren, wenn mich nicht alles täuscht

```
Document doc = null;
try
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    doc = parser.parse( #deinXML# );  // stream, file, oder sonst was... nachsehen
}
catch( ParserConfigurationException pce )
{
    pce.printStackTrace();
}
catch( SAXException saxe )
{
    saxe.printStackTrace();
}
catch( IOException ioe )
{
    ioe.printStackTrace();
}
XDocklet xxx = XPathAPI.eval( doc, "sum(/descendant-or-self::Sum[preceding-sibling::zentr=#deineNummer#])" );
```

aber wie dann weiter mit dem xxx iss mir auch unklar...

#edit 1: es könnte vll zu ein paar problemen kommen, da dein element Sum ähnlich wie die xpath-funktion sum() klingt... musst du mal sehen


----------



## Gast (23. Aug 2007)

mein element sum heisst ganz anders , 

hab das hier geschrieben, damit ich direkt ersichtlich was ich meine...

ich werd es jetzt ausprobieren! 


vielen dank dir erstmal!


----------

