Wie einen String(XML Inhalt) in eine XML Datei speichern?

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hey, suche schon total lange bei google und habe auch etwas gefunden.

"XMLOutputter" aber irgendwie habe ich nicht das richtige Document Format.

Also ich habe einen String, in dem sind jetzt ein parr Tags leer da ich inhalte gelöscht habe. Jetzt möchte ich diesen wieder in eine Datei speichern. Ich denke ein Parser würde die leeren Tags selbst weglöschen?
Nur wie funktioniert das? :( Also von einen XML-String in eine Datei.
 

Titanpharao

Bekanntes Mitglied
Irgendwie bleibts bei mir immer Rot ...

Möchte doch nur aus einer XML Datei alle leeren Tags rauswerfen :'(

Also sowas

<tag1>
<tag2>
</tag2>
</tag1>

...
 

pinhead84

Aktives Mitglied
Titanpharao hat gesagt.:
Ich denke ein Parser würde die leeren Tags selbst weglöschen?
Der XML-Parser / XML-Writer macht sowas in jedem Falle nicht automatisch, es ist ja schließlich nicht seine Aufgabe den XML-Code zu interpretieren.

Titanpharao hat gesagt.:
Möchte doch nur aus einer XML Datei alle leeren Tags rauswerfen :'(
Der Sinn erschließt sich mir nicht. Jedenfalls ist das Problem nicht so trivial, wie man meinen könnte.

Titanpharao hat gesagt.:
Also sowas

<tag1>
<tag2>
</tag2>
</tag1>
In deinem Beispiel sind beide Tags nicht leer:

(a) tag2 beinhaltet einen Leerstring / Zeilenumbruch
(b) tag1 beinhaltet tag2

Ein allgemeiner Automatismus, der <tag2> & <tag1> automatisch entfernt und wieder als XML-Datei speichert, kann zu einer ungültigen XML-Datei führen, die nicht mehr ihrem XSD-Schema entspricht. Nicht mal ein <tag3/> könnte man automatisiert löschen, ohne Konflikte mit dem Schema zu provozieren.

Dein Programm müsste rekursiv gegen das jeweilige Schema prüfen, ob das zu löschende Tag ein Pflichtfeld ist oder nicht.
 

Titanpharao

Bekanntes Mitglied
Es gibt keine XSD dazu. Die XML Files sind diff Files und werden regeneriert. Zeilenumbruch zählt nicht ... und wenn ich tag2 lösche ist tag 1 wieder leer ;)

Oder wie kann ich mit JDom auf leere Tags prüfen(ganz zu schweigen vom einlesen und schreiben, das will bei mir gerade überhaupt nicht :( )
 

pinhead84

Aktives Mitglied
Zeilenumbruch zählt nicht ... und wenn ich tag2 lösche ist tag 1 wieder leer
Ich wollte dir damit auch nur darstellen, dass 'leer' durchaus relativ sein kann. Dein Algorithmus müsste in jedem Falle rekursiv vorgehen, wie du ja schon andeutest. Wenn dir die Gültigkeit der XML-Dokumente egal sein kann, wäre XSLT eine stressfreie Alternative.

Oder wie kann ich mit JDom auf leere Tags prüfen
Dafür hast du alle möglichen Methoden in der Element-Klasse, z.B. getContent() oder getText().

Ein XML-Element wird vermutlich leer sein, wenn
Code:
element.getContent().isEmpty() && element.getText().trim().isEmpty()
 

Titanpharao

Bekanntes Mitglied
Klappt leider nicht, der sieht den Zeilenumbruch als Text ... :autsch:

Habe mal das probiert, löscht auch die äußersten Tags. In unserm Beispiel tag2, aber tag1 hat auf einmal 2Content? habe doch das eine herrausgelöscht?

Code:
	private static int getCountsofChild(Element element){
		int count=0;
		for(int i=0;i<element.getChildren().size();++i){
		
		Element ele=(Element)element.getChildren().get(i);
		if(ele.getText().trim().equals("")&&ele.getContent().size()==1){
//			System.out.println("Remove");
//			System.out.println("Tag:"+ele.getName());
//			System.out.println("Text:"+ele.getText().trim());
			element.getChildren().remove(i);
		}
//		System.out.println("Tag:"+ele.getName());
//		System.out.println("Text:"+ele.getText().trim());
//		System.out.println("ContentSize:"+ele.getContentSize());
//		System.out.println("Content:"+ele.getContent());
//		System.out.println(count);
		count=element.getChildren().size();		
		if(count>0)getCountsofChild((Element)element.getChildren().get(i));
		}
		
		return 0;
	}
 

pinhead84

Aktives Mitglied
Titanpharao hat gesagt.:
Klappt leider nicht, der sieht den Zeilenumbruch als Text ... :autsch:
Ich hab dich ja gewarnt. ;) - Hast du schonmal getTextTrim() versucht? - Im Notfall sollte auch ein String.replaceAll() funktionieren.

Titanpharao hat gesagt.:
Habe mal das probiert, löscht auch die äußersten Tags. In unserm Beispiel tag2, aber tag1 hat auf einmal 2Content? habe doch das eine herrausgelöscht?
Aus dem Bauch heraus, schaut mir der Algorithmus auch noch nicht ganz korrekt aus. Ich denke es ist einfacher, den rekursiven Abstieg in diesem Falle zu Beginn in der Schleife zu machen, nicht am Ende.
Code:
	private static int getCountsofChild(Element element){

		int count=0;
		if (!element.getTextTrim().trim().isEmpty()) count++;

		// Child-Tags prüfen
		for(int i=0;i<element.getChildren().size();i++){

			// rekursiver Prüfung der Child-Tags                
			Element child = (Element)element.getChildren().get(i);
			if (getCountsofChild( child )==0) element.removeContent( child );
			else count++;
		}

		return count;
	}
Habe den Code nicht getestet, also kein Gewähr für Korrektheit. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JAVA XML Parser der einen String parst XML & JSON 3
R wie kann ich ein xml file in einen string einlesen? XML & JSON 2
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
D XML Signature auf einen Tag mit id in definierten Namespace XML & JSON 1
G EMF - aus generic editor einen forms editor XML & JSON 2
S mit dom4j einen dom teilweise kopieren? XML & JSON 4
H Brauche ich einen speziellen XML-Parser? XML & JSON 2
P DOMParser parse() statt Pfadangabe einen XMLString übergeben XML & JSON 4
Sachinbhatt Python string find() examples XML & JSON 1
N JSON export String Unicode? XML & JSON 6
W Request als String XML & JSON 0
L Soapnachricht aus String erstellen XML & JSON 0
R String in XSLT teilen XML & JSON 3
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
M RSS als String speichern XML & JSON 12
W XMLStreamReader zu String machen? XML & JSON 2
B XML-Element als String ausgeben XML & JSON 5
H XML String auslesen XML & JSON 4
H XML String erstellen XML & JSON 4
N XML-String in MIDP auslesen XML & JSON 3
W String nach XML nach String verwandeln XML & JSON 4
W XML DomDocument als String auslesen XML & JSON 2
B jdom document aus string erzeugen? XML & JSON 1
H Adapter: String->Element bzw. Element->String XML & JSON 6
A XML Tags als PHP String XML & JSON 4
S String in element casten XML & JSON 2
I XML-String mit SAX parsen ? XML & JSON 2
G Elementbaum in String umwandeln XML & JSON 5
A StAX API: Cannot Cast from QName to String! XML & JSON 2
S org.jdom.document in String umwandeln. XML & JSON 2
S DefaultMutableTreeNodes als String in Textdatei speichern XML & JSON 7
W Xml-String parsen XML & JSON 2
B XML String einlesen XML & JSON 4
R XML Document als String XML & JSON 2
M Probleme mit String XML & JSON 3
G getAtributeValue liefert String mit störenden Steuerzeichen XML & JSON 2
D Text, String vor einem Root Element einfügen XML & JSON 2
E Element.setTextContent(String); Ersatz fuer Version 1.4? XML & JSON 3
M Layout + Inhalt einer JTable speichern XML & JSON 30
R Zugriff auf Inhalt eines Elements XML & JSON 2
E Wie kann ich den XML-Inhalt mit dem Klicken auf den Hyperlink (a-Tag) auf der nächsten Seite ansehen XML & JSON 62
J XML mit russischem Inhalt einlesen XML & JSON 4
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
J XML Tag Inhalt Ändern XML & JSON 11
W XPath + Inhalt aus <td> XML & JSON 2
T Inhalt einer .xml Datei auf Javaoberfläche wiedergeben XML & JSON 4
K XML als Inhalt eines DropDown XML & JSON 6
C Kompletten Inhalt eines Tags ausgeben XML & JSON 2
J DOM: Attribut und Inhalt eines Elements nachträglich ändern? XML & JSON 3
D Mit Sax Inhalt zwischen Tags in Vector speichern XML & JSON 4
M JDOM Element ohne Inhalt kopieren ? XML & JSON 3
M Inhalt zwischen Tags mit Sax XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben