Summe bilden wenn bestimmte Felder inhaltlich übereinstimmen

Status
Nicht offen für weitere Antworten.
N

No_Kind

Gast
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

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

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

No_Kind

Gast
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 :)
 
G

Guest

Gast
gleiche Zentralen finde ich so :



Code:
        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

Top Contributor
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...
 
G

Gast

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

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

mikachu

Top Contributor
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 ;)
 
G

Gast

Gast
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>
 
G

Gast

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

Gast

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


ein wenig sourcecode wäre garnicht verkehrt an dieser stelle :)
 

mikachu

Top Contributor
hmm, habs mir ehrlich gesagt leichter vorgestellt ;)

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

Gast

Gast
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???
 
G

Gast

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

mikachu

Top Contributor
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
Code:
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
 
G

Gast

Gast
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!
 
Status
Nicht offen für weitere Antworten.

Oben