# Auf bestimmtes Element im XML zugreifen



## KartoffelKiffer (30. Jul 2007)

Hallo,

ich habe mir folgendes SAX-Konstrukt geschaffen:


```
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import java.io.*;
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException;

public class Sax {

	public static void main(String[] args) {
		
		try {
		
			new Sax().createSaxParser();
		} catch (Exception e) {
			
			System.out.println("Erstellen des SAX-Parsers nicht möglich.");
		}
	}
	
	private void createSaxParser() throws Exception {
		
		SAXParserFactory factory = SAXParserFactory.newInstance(); 
		SAXParser saxParser = factory.newSAXParser();
		
		DefaultHandler handler = new Handler();
		saxParser.parse(new File("/home/tom/Desktop/test.xml"), handler);
	}
}

class Handler extends DefaultHandler {
	
	@Override 
	public void startDocument() { 
	
		System.out.println("Start"); 
	}	 
	@Override 
	public void endDocument() { 
	
		System.out.println("Ende"); 
	}
	@Override 
	public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 

		System.out.println("Element: " + qName); 
	 
		for (int i = 0; i < atts.getLength(); i++) {
				
			System.out.println("Attribut" + i + ": " + atts.getQName(i) + " = " + atts.getValue(i));
		}
	}
	@Override 
	public void characters(char[] ch, int start, int length) { 
	
		System.out.println("Inhalt:"); 
	
		for (int i = start; i < (start + length); i++) {
			
			System.out.print(ch[i]); 
		}	
		System.out.println(); 
	}
}
```

Funktioniert auch einwandfrei, es wird jedes mögliche XML korrekt ausgelesen.

Nun möchte ich jetzt auf ein bestimmtes Element, das durch Namen des Elements und dessen Attribut identifiziert wird, in meinem XML zugreifen. Ist dies mittels SAX-Parser auch möglich?

Bsp.:
<?xml...
<main>
   <child1>nich von interesse</child1>
   <child2 attr="hier">das m&chte ich auslesen</child2>
</main>

Auf mein child2 im Main-Element main mit dem Attribut attr = "hier" soll zugegriffen werden.

Leider bekomme ich dies nicht so recht hin, deshalb benötige ich Eure Hilfe.



Mfg Tom


----------



## eric (7. Aug 2007)

sinngemäß folgendes:
- in der startElement-Methode auf den gesuchten Namen prüfen
- im gefunden Element alle Attribute prüfen

Für solche Fälle gibts aber andere Techniken wie XPath.


----------



## KartoffelKiffer (16. Aug 2007)

Was würdest du denn da empfehlen?



Mfg Tom


----------



## eric (16. Aug 2007)

Für was willst eine Empfehlung?

Reicht Dir zum Auslesen XPath nicht?
Falls Du das XML in Objekte überführen willst, um mit denen weiterzuarbeiten, such mal nach JAXB

Aber für den Anfang ist SAX erstmal genau richtig, dann DOM, daraus ergibt sich automatisch XPath u.s.w.

Grüße Eric


----------

