# NodeList rückwärts scannen, alle Parent Nodes ausgeben rekursiv und nicht-reukrsiv



## sehams (22. Jan 2015)

Hallo

Wie der Titel schon sagt soll ich eine NodeList von einem bestimmten Eintrag aus mit all ihren ParentNodes ausgeben. Doch leider stehe ich hierbei auf dem Schlauch:

Die XML:

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Fahrtenbuch SYSTEM 'x.dtd'>

<Zoo>
	<areal name="asien">
		<tier id="t1" name="Karl" pfleger="p1" />
		<tier id="t2" name="Nico" pfleger="p2" />
		<tier id="t3" name="Berta" pfleger="p3" />
		<tierpfleger id="p1" name="Schmusi"/>
		<tierpfleger id="p2" name="Hasi"/>
		<tierpfleger id="p3" name="Schnuffi"/>
	</areal>
</Zoo>
```

Die DTD:

```
<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT Zoo (areal+)>

<!ELEMENT areal (tier+)> 
	<!ATTLIST areal
		name CDATA #REQUIRED
	>
		
<!ELEMENT tier (pfleger)>
	<!ATTLIST tier
		 id ID #REQUIRED
		 name CDATA #REQUIRED
		 pfleger IDREF #REQUIRED
	>
		 
<!ELEMENT pfleger (tier)>
	<!ATTLIST pfleger
		id ID #REQUIRED
	>
```

Und das ist der restliche Code:

```
// REKURSIV
	public static void rekursiv() {

		Node startknoten = d.getDocumentElement();
		NodeList nodeList = startknoten.getChildNodes();

		for (int i = nodeList.getLength(); i > 0; ++i) {
			Node currentNode = nodeList.item(i);
			
			if (currentNode.getNodeName().equals(knoten)) {
				Element e = (Element) currentNode;
				String id = e.getAttribute("id");
				System.out.println(id);
			
			findParentNode((Element) currentNode);
		}}
	}

	public static String findParentNode(Element currentNode) {
		while (currentNode.getParentNode() != null) {
			currentNode = (Element) currentNode.getParentNode();
			if (currentNode.getTagName() == knoten)
				System.out
						.println(((Element) currentNode).getAttribute("name"));
		}
		return null;
	}

	// NICHT REKURSIV
	public static void nichtRekursiv() throws SAXException, IOException,
			ParserConfigurationException {

		parse();
		Node startknoten = d.getDocumentElement();
		NodeList nodeList = startknoten.getChildNodes();

		for (int i = nodeList.getLength(); i > 0; i++) {			
			Node currentNode = nodeList.item(i);
			if (currentNode.getNodeName() == knoten) {
				System.out
						.println(((Element) currentNode).getAttribute("name"));
				do {
					System.out.println(((Element) currentNode)
							.getAttribute("name"));
					currentNode = currentNode.getParentNode();
				} while (currentNode.getParentNode() != null);
			}
		}
	}
```
Leider funktionieren keine der beiden Methoden und das ganze muss  eigentlich bis 24:00 per mail an meinen Prof gehen, sonst bestehe ich das Praktikum nicht.Ist die letzte von 12 Praktikumsaufgaben, alle anderen habe ich schon eingereicht .
Würde mich also massig über Hilfe freuen!!!


----------

