brauche Tips, wie ich am besten auf Elemente zugreife

Status
Nicht offen für weitere Antworten.

Gayson

Bekanntes Mitglied
Hallo!
Ich brauch mal ein paar Tips von euch, wie ich mit Hilfe von JDom auf bestimmte Elemente in einer XML-Datei zugreifen kann.

Hier eine Beispiel-XML-Datei:

Code:
<?xml version="1.0"?>
<Pflegekraft>
	<Mitarbeiter>
		<Name>Kai</Name>
		<Stunden>5</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Kurt</Name>
		<Stunden>4</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Niels</Name>
		<Stunden>3</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
	<Mitarbeiter>
		<Name>Timo</Name>
		<Stunden>2</Stunden>
		<Urlaub>nicht</Urlaub>
	</Mitarbeiter>
</Pflegekraft>

Wie ich den ersten Namen aufrufe (Kai), habe ich schon rausgefunden, geht ja relativ einfach mit getChild.
Gibt es eine Möglichkeit, den 3. Namen aus der Datei auszuwerfen? Soweit ich das verstanden habe, sollte das mit getChildren gehen:

Code:
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			Element mitarbeiter = root.getChild( "Mitarbeiter" );
			List alleMitarbeiter = root.getChildren();
			System.out.println(alleMitarbeiter.get(3));
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}

So, wenn ich das hätte, würde mich noch interessieren, wieviel (Über)Stunden der 3. Mitarbtier hat, wie komm ich da am besten ran?
 

Gayson

Bekanntes Mitglied
Nachdem ich die hälfte meines Tages mit Lektüre verbracht habe, kann ich mir jetzt selbst den Code präsentieren ;) :


Gibt aus, wieviel Überstunden Niels hat:
Code:
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
			Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
			while (mitarbeiterIterator.hasNext()) {
				Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
				Element mitarbeiterName = mitarbeiterElement.getChild("Name");
				if(mitarbeiterName.getText().equals("Niels")){
					Element mitarbeiterStunden = mitarbeiterElement.getChild("Stunden");
					System.out.println(mitarbeiterStunden.getText());
				}
			}
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}



Gibt aus, wer der dritte Mitarbeiter in der Liste ist:
Code:
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build("Mitarbeiter.librml");
			Element root = doc.getRootElement();
			List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
			Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
			int count=0;
			while (mitarbeiterIterator.hasNext()) {
				count ++;
				Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
				Element mitarbeiterName = mitarbeiterElement.getChild("Name");
				if (count==3){
					System.out.println(mitarbeiterName.getText());
				}
			}
		} catch (JDOMException e){e.printStackTrace();}
		catch (IOException e) {e.printStackTrace();}
 

Gayson

Bekanntes Mitglied
Hallo!
Ich habe ein neues Problem mit dem ändern von XML-Daten. Folfendes Beispiel: Ich möchte bei oben genannter XML-Tabelle beim "Kurt" die "Stunden" von "4" in "drei" ändern.
Doch irgendwie klappt dies nicht:

Code:
						SAXBuilder builder = new SAXBuilder();
						Document doc = builder.build("Mitarbeiter.librml");
						Element root = doc.getRootElement();
						List mitarbeiterInfo = root.getChildren("Mitarbeiter");;
						Iterator mitarbeiterIterator = mitarbeiterInfo.iterator();
						while (mitarbeiterIterator.hasNext()) {
							Element mitarbeiterElement = (Element) mitarbeiterIterator.next();
							Element mitarbeiterName = mitarbeiterElement.getChild("Name");
							if(mitarbeiterName.getText().equals("Kurt")){
								mitarbeiterElement.removeChild("Stunden");
								Element stunden = new Element("Stunden");
								stunden.addContent("drei");
								mitarbeiterElement.addContent(stunden);
							}
						}
 

citizen_erased

Bekanntes Mitglied
du speicherst den umgeformten xml-baum nicht in der datei ab. er exisitert nur im speicher.

Code:
public void writeFile() {        
        OutputStream stream = null;
        try {
            stream = new FileOutputStream(file);
        }
        catch(FileNotFoundException fnfe) {
           // ...
        }
        
        Format format = Format.getPrettyFormat();
        XMLOutputter out = new XMLOutputter(format); 
                
        try {
            synchronized (file) { 
                out.output(doc,stream);
            }
            stream.flush();
            stream.close();
        }
        catch(IOException ioe) {
            // ...
        }        
    }
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben