# sax kinder zählen



## keeper (22. Mai 2008)

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 (23. Mai 2008)

Du könntest dir eine List<Integer> machen:

```
private List<Integer> elementsList = new ArrayList<Integer>();
```
In startElement zählst du dann für jeden neuen test die temp2, etwa so:

```
@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:

```
int max = 0;
        for (Integer integer : elementsList) {
            if(integer > max){
                max = integer;
            }
        }
```

Es geht natürlich auch mit zwei einfachen int Variablen:

```
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 (23. Mai 2008)

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.


----------

