# Rekursiver Verzeichniss Baum in XML & XPath



## theomega (27. Feb 2005)

Hallo Leute,
ich habe eine XML-Datei in folgendem Format:

```
<?xml version="1.0" encoding="UTF-8"?>
<JDuplicateFinderFile basepath="C:\apache">
  <folder path="">
    <folder path="/Apache">
      <folder path="/Apache/logs">
        </file>
        <file name="error.log" size="2533134" lastmodified="1109173436000" canRead="true" canWrite="true" isHidden="false">
        </file>
        <file name="httpd.pid" size="6" lastmodified="1109359650000" canRead="true" canWrite="true" isHidden="false">
        </file>
      </folder>
```

ich will jetzt gerne auf eine bestimmte Datei zugreifen, deren Pfad ich kenne. Aufgrund dieser AUfgabe habe ich an XPath gedacht, leider sind meine Kenntnisse darin recht beschränkt. Trotzdem habe ich mit JDom und XPath folgendes KOnstriuiert:

```
Object test = XPath.selectSingleNode(doc,"/child::JDuplicateFinderFile/child::folder/attribute::path[(child::text() = \"\")]");
			if (test!=null) {
				System.out.println("Found");
			}
			else {
				System.out.println("Nothing found");
			}
```

damit sollte ja der erste Folder-Eintrag ausgewählt werden, wird er aber nicht! Oder gibt es eine simplerer Lösung, wenn ich als Pfad weiß /Apache/logs/error.log an das Element zu kommen?

Danke und Gruß
TO


----------



## clemson (27. Feb 2005)

es kommt drauf an, wie 'genau' du deine abfrage machen möchtest...

du kannst dir beispielsweise das file Element mit dem attribut name folgendermaßen holen

//*[@name='error.log']

die gefahr hierbei ist, sobald es (wahrscheinlich) mehrere dateien mit dem namen error.log gibt.


genauer kannst du zugreifen mit 

//folder/folder/file[@name='error.log']


----------



## theomega (27. Feb 2005)

aber selbst das ist doch nicht eindeutig, theoretisch könnte es doch noch eine Datei mit dem namen error.log geben die 2 Order unterhalb der Hauptebene liegt.


----------



## clemson (27. Feb 2005)

dann musst du eben deine abfrage spezialisieren...

http://www.zvon.org/xxl/XPathTutorial/General_ger/examples.html


----------



## clemson (27. Feb 2005)

so beispielsweise

//folder[@path='/Apache/logs']/file[@name='error.log']


----------

