# suche bestimmten Knoten mit bestimmten attribut



## christophd (25. Nov 2005)

Hallo,
bin java anfänger und stehe ein wenig an.

Ich habe es geschafft eine Homepage einzulesen und mit jtidy glattgebügelt und habe jetzt vermutlich einen funktionierenden DOM.

Die Homepage besteht aus allem möglichen, Ich möchte nur die Knoten mit "div" und dem Attribut id="Layer1" herausfischen und in neues Document schreiben.

Dies ist ein bespiel eines knoten die ich in eine neue xml struktur packen will:

```
....
<div id="Layer1" class="text123">
<div>2.15</div>
</div>
....
```
Wie suche ich nach Knoten "div" und Attribut id="Layer1" durch den ganzen Dom?

Vielen Dank!
Christoph


----------



## Roar (25. Nov 2005)

rekursiv den baum durchlaufen: Node#getChildNodes()
und für jedes Element überprüfen ob Element.getTagName().equals("div");
wenn ja das ganze Element ins neue Document einfügen. die kinder von dem Element brauchst du ja nicht nochmal zu überprüfen so wie in deinem beispielcode, da ja eh die ganze struktur eingefügt wird. oder willst du wirklich nur die div elemente ohne kinder haben?


----------



## christophd (26. Nov 2005)

Ich habe einmal ein wenig gebastelt. So ungefähr sollte es funktionieren.


```
public static Node knotenSuchen(Node doc)
	  {
		 NodeList temp = doc.getChildNodes();
		 
		 for(int i = 0;i<temp.getLength(); i++){
			 knotenSuchen(temp.item(i));
		 }
	  }
```

Wo füge ich die überprüfung (getTagName().equals("div") && "Attribut" id=Layer1 ) ist vorhanden ein und wie mache ich das mit den returnwerten?

vg christoph


----------



## Roar (26. Nov 2005)

ach, willst du nur *ein* elemt haben nämlich das mit dem namen div und der id "Layer1" oder alle div elemente? wenn ersteres dann so:


```
public static Element knotenSuchen(Element elem, String name, String id)
     {
       if(elem.getTagName().equals(name) && elem.getAttribute("id").equals(id))
            return elem;
       NodeList temp = doc.getChildNodes();
      
       for(int i = 0;i<temp.getLength(); i++){
          Node item = temp.item(i);
          if(item instanceof Element)
              knotenSuchen((Element) item);
       }
     }
```

wenn du mehrere knoten haben willst: in Liste einfügen und als array zurückgeben.


----------



## Guest (27. Nov 2005)

danke! Ich will mehree Knoten, das bekomme ich schon hin.

aber mein element hat kein .getTagName()

das sind meine imports:

```
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import org.jdom.Element;
import org.jdom.xpath.XPath;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.tidy.Tidy;
```

Habe ich das falsche jdom.Element?


----------



## Roar (27. Nov 2005)

hä? benutzt du jdom oder die jaxp? oder vermischst du beides in der hoffnung dass java schon weiß was du meinst?


----------



## Guest (27. Nov 2005)

Ich hab keine Ahnung was ich benutzen soll, bzw. was besser ist 

Was ist jaxp?


----------



## Roar (27. Nov 2005)

Anonymous hat gesagt.:
			
		

> Ich hab keine Ahnung was ich benutzen soll, bzw. was besser ist


 das, mti dem du besser klarkommst? :?



> Was ist jaxp?


 die javax.xml und org.w3c packages

du kansnt nicht einfach beides zusammenschmeißen. mein beispiel bezog sich auf die org.w3c.dom interfaces


----------



## christophd (27. Nov 2005)

Vielen Dank für deine Hilfe!

Es funktioniert!


----------

