XML-Dateien ergänzen

$horty$2

Grünschnabel
Hi zusammen,
ich habe folgende Aufgabe:

Ich bekomme mehrere XML Dateien, die den selben Aufbau vorweisen (selbe Attributnamen, unterschiedliche Werte).
Um jetzt nicht bei jeder Änderung in jede XML Datei "reingehen" zu müssen und diese Änderungen per Hand durchzuführen, soll dies automatisch geschehen.

Zum Anfang habe ich mir vorgenommen mich mit dem Einfügen von neuen Attributen in die XML-File zu beschäftigen.
Das Problem:
Wenn man einfach ein neues Attribut einfügt, ist das ja kein Problem, was aber, wenn der "Elternknoten" bereits existiert?

Beispiel:

einzufügende Zeile: <Node3.2>huhuhu</Node3.2> unter Node2

Code:
<Node1>
   <Node2>
      <Node3>hallo</Node3>
   </Node2>
</Node1>

Gibts da was Schönes? :>

Lieben Gruß,
shortys
 
Moin,

irgendwie verstehe ich nicht ganz, was genau Du eigentlich fragen möchtest :confused:

Als Ergebnis erwartest Du vermutlich dies:
Code:
// V1
<Node1>
   <Node2>
      <Node3.2>huhuhu</Node3.2>
      <Node3>hallo</Node3>
   </Node2>
</Node1>

// oder V2
<Node1>
   <Node2>
      <Node3>hallo</Node3>
      <Node3.2>huhuhu</Node3.2>
   </Node2>
</Node1>

Im ersten Fall parst Du einfach nach "<Node2>" und fügst direkt danach ein, im andern Fall halt nach "</Node2>" und fügst direkt davor ein !

Wo ist jetzt Dein Problem ?

Gruß
Klaus
 
Hoi,

danke schonmal für die Antwort.

Das Problem ist, dass ich noch nie mit XML / Parsern gearbeitet hab :(

Ich bin mittlerweile soweit, dass ich mit dem Parsen fertig bin.
Jetzt bräuchte ich noch Hilfe beim einfügen an der richtigen Stelle:


Code:
...
...

public class XML_parse{

	public static void main(String[] args) {
	
		new XML_parse().doIt(args);
		System.out.println(args[0]);
		SAXBuilder a = new SAXBuilder();
	}


private void doIt(final String[] args1) {		
		
		
		
			XMLReader reader = null;
			try {
				reader = XMLReaderFactory.createXMLReader();
			} catch (SAXException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		reader.setContentHandler(new DefaultHandler() {						
				public void startElement(String uri,String localName, String qName, Attributes attributes) throws SAXException {	
					
					if(qName.equals(args1[0])){
						
						//RICHTIGE STELLE GEFUNDEN - REINSCHREIBEN


						try {
						} [...catches...]					
						
						System.out.println(" wird hier eingefügt");
						}
					System.out.println(qName);
					}
				}
			);			
			
			
			try {
				reader.parse(new InputSource(new FileInputStream("c:/config.xml")));
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SAXException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} 
	}
 
oh, sorry, aber ich werde mich hier doch ausklinken, da ich den "SAXBuilder" auch nur von Hören/Sagen kenne ...

Gibt's denn dazu kein Manual ?

Gruß
Klaus
 
Es muss nicht der SAX sein :)

Kann auch jeder beliebige andere Parser sein, solang der die Aufgabe erfüllt.
Hab den nur gewählt weil ich als erstes drauf gestoßen bin ;)

Gruß
 
nee, ich hab' mich damit noch nie beschäftigt, sondern das Parsen mal händisch (für eine kleineren Sonderfall) selbst programmiert!
Ich hatte die XML-Datei zeilenweise in ein String-Array eingelesen und dann damit gearbeitet!

Dachte, du suchtest sowas in der Art ....;)
Gruß
 
XML per Hand parsen oder editieren finde ich immer grausig. Ich würde es mit XStream in entsprechende Objekte einlesen. Dann einfach ein neues Objekt an der richtigen Stelle erstellen und das ganze wieder speichern. Wenn die XML-Datei nicht allzu groß ist, ist das vom Code her die schönere Lösung.
 
Hi,
Strategie sollte bei SAX folgende sein.
  1. Bastele einen Sax-Handler, der Deine XML-Datei lediglich 1 zu 1 kopiert
  2. Bastele etwas, das den gesammten Pfad (XML-Hierachhie) widerspiegelt, wenn Du auf ein Element stößt bzw. Du dieses wieder verlässt.
  3. Wenn Du auf einen Event für das Ende eines Elementes stößt, das den gewünschten XML-Pfad angehört, in dem Du etwas dranfügen möchtest, füge es Deiner Kopie hinzu.

bei weiteren Fragen kann ich Dir auch noch ein wenig weiterhelfen.
zunächst aber viel Glück und Spaß

Takidoso
 
Zuletzt bearbeitet:
Hi Leute,
erstmal vielen Dank für die Hilfe!

Ich habs jetzt hinbekommen und für Interessierte werde ich gleich mal den Code posten!

Nochmals vielen Dank ;)

Gruß,
shortys
 

Neue Beiträge

Zurück