# Anzahl der Knoten in einer XML



## dod (22. Okt 2007)

Hallo Leute!
Wieviele Unterknoten haben die Rootelemente in folgenden XML-Dateien?

bsp1.xml

```
<root><a /><b /></root>
```
bsp1.xml

```
<root>
    <a />
    <b />
</root>
```
blöde Frage?
dann lasst euch überraschen 

```
public class MyClass {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        
        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        final DocumentBuilder builder = factory.newDocumentBuilder();
        final Document document = builder.parse(new File("bsp1.xml"));
        
        final Node rootNode = document.getDocumentElement();
        final NodeList nodeList = rootNode.getChildNodes();
        
        for(int i = 0; i < nodeList.getLength() ;i++){
            System.out.println("Child[" + i + "]: '" + nodeList.item(i).getNodeName() + "'");    
        } 
    }
}
```

Die Ausgabe bei bsp1.xml

```
Child[0]: 'a'
Child[1]: 'b'
```
Die Ausgabe bei bsp2.xml

```
Child[0]: '#text'
Child[1]: 'a'
Child[2]: '#text'
Child[3]: 'b'
Child[4]: '#text'
```
Wie kann man die Text- bzw. Kommentarknoten abschalten?


----------



## Marco13 (22. Okt 2007)

Hm  :? Im ersten Moment war ich - zugegeben - auch etwas überrascht - aber auf den zweiten Blick ist es einleuchtend: Wenn der Knoten
<node>...(lauter Leerzeichen)...</node>
KEINE children hätte, könnte man ja keinen String in XML speichern, der nur aus Leerzeichen besteht.... 

Eine Möglichkeit, dass "programmatisch" wirklich abzuschalten, kenne ich nicht, aber als dumme Gegenfrage: Warum willst du die abschalten? Man sollte sich bei XML nie auf eine bestimmte Anzahl oder Reihenfolge von Knoten verlassen - und unbekannte Knoten sollten einfach ignoriert werden...


----------



## dod (22. Okt 2007)

<node>...(lauter Leerzeichen)...</node> ist der Inhalt der TEXT_NODE (PCDATA) aber hier geht es um die Inhalte zwischen den Knoten, was haben die in einem DOM-Model zu suchen? (wegen der Kommentare?)


----------



## dod (22. Okt 2007)

ich habe folgende Aufgabe: die XML-Daten sollen formatiert in einer Datei landen. Die Richtlinien der Formatierung sollen weiteren Systemen die Verarbeitung erleichtern (z.B. für UNIX-Systeme sollte jeder Knoten mit einem Zeilenumbruch "\n" enden und WINDOWS mit "\r\n" und s.w.) was die Inhalte angeht (bekannte/unbekannte Knoten) gehen mich nicht an.


----------



## 20mithrandir (22. Okt 2007)

```
if ( nodeList.item(i).getNodeType() == Node.ELEMENT_NODE ) ...
```

http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/Node.html


----------



## Marco13 (22. Okt 2007)

Naja - bei diesem Beispiel

```
<root>
    <a />
    <b />
</root>
```
Enthält der root-Knoten eben 5 Children: 
1. Ein #text-Node, dessen nodeValue "RETURN+Tab" ist, 
2. Knoten <a>
3. Ein #text-Node, dessen nodeValue "RETURN+Tab" ist, 
4. Knoten *
5 Ein #text-Node, dessen nodeValue "RETURN" ist

Kann ein bißchen lästig sein, beim parsen... aber ... das ist nunmal das, was da steht...   :?*


----------



## dod (22. Okt 2007)

also ich mach folgendes: ist die Anzahl der Kinder > 1  - suche nur nach Elementen
wenn ein Kind - Text oder Element
DANKE für Eure Hilfe!


----------

