sax kinder zählen

Status
Nicht offen für weitere Antworten.

keeper

Neues Mitglied
Hallo,

Habe folgendes Problem ich möchte mittels Sax, die maximale Kindanzahl von einem Element des xml Files errechnen. Bsp:

<root>
<test>
<temp2/>
<temp2/>
</test>
<test>
<temp2/>
<temp2/>
<temp2/>
<temp2/>
</test>
</root>

Hier wäre nun also das Ergebnis 4 (test hat 4 Kinder).

Es gibt ja die Methoden startElement und endElement die für jedes Element aufgerufen werden. Finde nur trotzdem leider keine Lösung. Wäre nett wenn mir jemand helfen könnte.

Gruß,
keeper
 

André Uhres

Top Contributor
Du könntest dir eine List<Integer> machen:
Code:
    private List<Integer> elementsList = new ArrayList<Integer>();
In startElement zählst du dann für jeden neuen test die temp2, etwa so:
Code:
   @Override
    public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException {
        String eName = sName;
        if ("".equals(eName)) {
            eName = qName;
        }
        if (eName.equalsIgnoreCase("test")) {
            elementsList.add(0);
        }else if (eName.equalsIgnoreCase("temp2")) {
            int count = elementsList.get(elementsList.size() - 1);
            count++;
            elementsList.set(elementsList.size() - 1, count);
        }
    }
Dann brauchst du nur noch in elementsList den maximalen Wert zu suchen:
Code:
       int max = 0;
        for (Integer integer : elementsList) {
            if(integer > max){
                max = integer;
            }
        }

Es geht natürlich auch mit zwei einfachen int Variablen:
Code:
    private int count,  max;
...
    @Override
    public void endElement(String namespaceURI, String sName, String qName) throws SAXException {
        String eName = sName;
        if ("".equals(eName)) {
            eName = qName;
        }
        if (eName.equalsIgnoreCase("temp2")) {
            count++;
        } else if (eName.equalsIgnoreCase("test")) {
            if (count > max) {
                max = count;
            }
            count = 0;
        }
    }
 

keeper

Neues Mitglied
Ok danke für deine Hilfe das funktioniert auch gut.

Nur was mach ich wenn es ein belibiges XML File ist von dem ich die Tag Namen nicht kenne das auch belibig tief und verschachtelt sein kann und ich möchte trotzdem den maximalen Kind Wert errechnen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben