XML lesen und schreiben

Steff87

Aktives Mitglied
Hallo zusammen!

ich möchte aus einer XML-Datei lesen und Werte von dieser Datei ändern. Das Lesen der Datei funktioniert schon nicht schlecht, aber wie ich werte ändere weiß ich nicht, bzw. werden nicht in die XML-Datei übertragen. Ich verwende dabei DOM.
Ich weiß, dass das relativ langsam ist. Wenn es etwas gibt, das schneller ist und mit dem man die XML-Datei ändern kann, ohne diese neu zuschreiben, nur her damit. Es sollte aber ohne zusätliche Bibliotheken auskommen.
Hier erstmal den Code, was ich gemacht habe:
Java:
mport java.awt.Color;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLReader {
	
	public static final String MAX_SPEED = "maxSpeed";
	public static final String ROTATION = "rotation";
	public static final String ACC_X = "accX";
	public static final String ACC_Y = "accY";
	public static final String ACC_Z = "accZ";
	
	DocumentBuilderFactory factory = null;
	DocumentBuilder builder = null;
	Document document = null;
	File xmlSorce;
	
	public XMLReader() {
		xmlSorce = new File("RevColor.xml");
		factory = DocumentBuilderFactory.newInstance();
		try {
			builder = factory.newDocumentBuilder();
			document = builder.parse(xmlSorce);
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	Color[] getColors(String visOption){
		NodeList color = null;
		Node red=null;
		Node green = null;
		Node blue = null;
		int[] tmpColors={0,0,0};
		Color[] colors = {null, null, null};
	    NodeList childs = document.getElementsByTagName(visOption).item(0).getChildNodes();
	    System.out.println(childs.getLength());
	    for(int i =0 ; i<childs.getLength(); i++){
	    	if(childs.item(i).getNodeName().equalsIgnoreCase("colorGood")){
	    		color = childs.item(i).getChildNodes();
	    		for (int j=0;j<color.getLength();j++){
	    			if(color.item(j).getNodeName().equals("Red")){
	    				red = color.item(j);
	    				tmpColors[0] = Integer.parseInt(red.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Green")){
	    				green = color.item(j);
	    				tmpColors[1] = Integer.parseInt(green.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Blue")){
	    				blue = color.item(j);
	    				tmpColors[2] = Integer.parseInt(blue.getTextContent());
	    			}
	    		}
	    		colors[0] = new Color(tmpColors[0],tmpColors[1], tmpColors[2]);
	    	}
	    	
	    	if(childs.item(i).getNodeName().equalsIgnoreCase("colorOK")){
	    		color = childs.item(i).getChildNodes();
	    		for (int j=0;j<color.getLength();j++){
	    			if(color.item(j).getNodeName().equals("Red")){
	    				red = color.item(j);
	    				tmpColors[0] = Integer.parseInt(red.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Green")){
	    				green = color.item(j);
	    				tmpColors[1] = Integer.parseInt(green.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Blue")){
	    				blue = color.item(j);
	    				tmpColors[2] = Integer.parseInt(blue.getTextContent());
	    			}
	    		}
	    		colors[1] = new Color(tmpColors[0],tmpColors[1], tmpColors[2]);
	    	}
	    	if(childs.item(i).getNodeName().equalsIgnoreCase("colorBad")){
	    		color = childs.item(i).getChildNodes();
	    		for (int j=0;j<color.getLength();j++){
	    			if(color.item(j).getNodeName().equals("Red")){
	    				red = color.item(j);
	    				tmpColors[0] = Integer.parseInt(red.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Green")){
	    				green = color.item(j);
	    				tmpColors[1] = Integer.parseInt(green.getTextContent());
	    			}else if(color.item(j).getNodeName().equals("Blue")){
	    				blue = color.item(j);
	    				tmpColors[2] = Integer.parseInt(blue.getTextContent());
	    			}
	    		}
	    		colors[2] = new Color(tmpColors[0],tmpColors[1], tmpColors[2]);
	    	}
	    }
		return colors;
	}
	
	void setColor(String visOption, int index, Color color){
		NodeList colorNodes = null;
		Node red=null;
		Node green = null;
		Node blue = null;
	    NodeList childs = document.getElementsByTagName(visOption).item(0).getChildNodes();
	    System.out.println(childs.getLength());
	    for(int i =0 ; i<childs.getLength(); i++){
	    	if(childs.item(i).getNodeName().equalsIgnoreCase("colorGood")){
	    		colorNodes = childs.item(i).getChildNodes();
	    		for (int j=0;j<colorNodes.getLength();j++){
	    			if(colorNodes.item(j).getNodeName().equals("Red")){
	    				red = colorNodes.item(j);
	    				red.setTextContent(color.getRed()+"");
	    			}else if(colorNodes.item(j).getNodeName().equals("Green")){
	    				green = colorNodes.item(j);
	    				green.setTextContent(color.getGreen()+"");
	    			}else if(colorNodes.item(j).getNodeName().equals("Blue")){
	    				blue = colorNodes.item(j);
	    				blue.setTextContent(color.getBlue()+"");
	    			}
	    		}
	    	}
	    }	    
	}
	
	public static void main(String[] args) {
		XMLReader reder = new XMLReader();
		reder.getColors(XMLReader.ACC_X);
		reder.setColor(MAX_SPEED, 0, new Color(215,0,22));
	}
}
und die notwendige xml-Datei:
HTML:
<?xml version="1.0" ?>
<visualColor>
	<maxSpeed>
		<colorGood>
			<Red>0</Red>
			<Blue>0</Blue>
			<Green>255</Green>
		</colorGood>
		<colorOK>
			<Red>255</Red>
			<Blue>255</Blue>
			<Green>0</Green>
		</colorOK>
		<colorBad>
			<Red>255</Red>
			<Blue>0</Blue>
			<Green>0</Green>
		</colorBad>
	</maxSpeed>
	<rotation>
		<colorGood>
			<Red>0</Red>
			<Blue>0</Blue>
			<Green>255</Green>
		</colorGood>
		<colorOK>
			<Red>255</Red>
			<Blue>255</Blue>
			<Green>0</Green>
		</colorOK>
		<colorBad>
			<Red>255</Red>
			<Blue>0</Blue>
			<Green>0</Green>
		</colorBad>
	</rotation>
	<accX>
		<colorGood>
			<Red>0</Red>
			<Blue>0</Blue>
			<Green>255</Green>
		</colorGood>
		<colorOK>
			<Red>255</Red>
			<Blue>255</Blue>
			<Green>0</Green>
		</colorOK>
		<colorBad>
			<Red>255</Red>
			<Blue>0</Blue>
			<Green>0</Green>
		</colorBad>
	</accX>
	<accY>
		<colorGood>
			<Red>0</Red>
			<Blue>0</Blue>
			<Green>255</Green>
		</colorGood>
		<colorOK>
			<Red>255</Red>
			<Blue>255</Blue>
			<Green>0</Green>
		</colorOK>
		<colorBad>
			<Red>255</Red>
			<Blue>0</Blue>
			<Green>0</Green>
		</colorBad>
	</accY>
	<accZ>
		<colorGood>
			<Red>0</Red>
			<Blue>0</Blue>
			<Green>255</Green>
		</colorGood>
		<colorOK>
			<Red>255</Red>
			<Blue>255</Blue>
			<Green>0</Green>
		</colorOK>
		<colorBad>
			<Red>255</Red>
			<Blue>0</Blue>
			<Green>0</Green>
		</colorBad>
	</accZ>
</visualColor>

ich hoffe, dass mir jemand helfen kann. Vielleicht gibts ja auch schon was in diesem Forum, dass ich nicht gefunden habe.

Danke schon mal an alle.
 

aze

Bekanntes Mitglied
Hallo zusammen!

ich möchte aus einer XML-Datei lesen und Werte von dieser Datei ändern. Das Lesen der Datei funktioniert schon nicht schlecht, aber wie ich werte ändere weiß ich nicht, bzw. werden nicht in die XML-Datei übertragen. Ich verwende dabei DOM.
Ich weiß, dass das relativ langsam ist. Wenn es etwas gibt, das schneller ist und mit dem man die XML-Datei ändern kann, ohne diese neu zuschreiben, nur her damit. Es sollte aber ohne zusätliche Bibliotheken auskommen.

Eine Alternative wäre sonst ein Xml-Object Mapper wie Jaxb.Der ist auch schon in Java standardmässig drin.Damit kann man Xml Dateien in Objekte umwandeln und diese später wieder als Xml Datei exportieren.Das ganze wird mit Annotationen gesteuert und würde sicherlich wenig Code brauchen als deine Lösung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Komfortabel XML Dokumente schreiben und lesen XML & JSON 6
Maxim6394 Lesen/Schreiben von XML Datei XML & JSON 9
K JAXB: Klassen mit Annotation Lesen/Schreiben XML XML & JSON 3
J XML lesen schreiben XML & JSON 7
T Xml lesen und in .txt zeilenweise schreiben XML & JSON 4
L Einfaches XML Lesen und Schreiben XML & JSON 4
O OpenDocument-Tabelle mit Java lesen und schreiben XML & JSON 3
B Klassen mit generischen Attributen mit Jackson lesen XML & JSON 4
H XMLConfiguration(1.10)/getString : Wert "E" aus <version type="Auto">E</version>n lesen XML & JSON 15
C einfach XML lesen XML & JSON 4
JBoby Yaml File lesen und in Objekte umwandel (SnakeYAML / YamlBeans) XML & JSON 0
E Einzelne Tags der context.xml lesen XML & JSON 1
W Json von URL Lesen (mit Gson Library) XML & JSON 3
W Json von URL Lesen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
F KindElemente lesen und begrenzen XML & JSON 0
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
R XLM Datei lesen Ändern (kompliziertes Search and Replace) und Speichern XML & JSON 12
Q Atom/RSS-Feed lesen - per XSD zu Java-Code XML & JSON 4
O PDF mit Pdfbox lesen XML & JSON 3
S XMLStreamReader, letzten eintrag eines xml lesen? XML & JSON 5
N MalformedByteSequenceException bei Lesen aus XML Datei XML & JSON 2
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
Mike90 -xlsx Dateien in Java lesen XML & JSON 3
Fadi .classpath(XML) mit Java lesen XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
J Logdaten als XML speichern und lesen XML & JSON 2
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
C SAX Probleme beim lesen XML & JSON 4
R key aus xml lesen mittels jdom XML & JSON 5
F XML ( ca. 280 MB) JDom & SAXBuilder lesen = OutOfMemoryE XML & JSON 4
O XML lesen, wenn DTD in anderem Verzeichnis XML & JSON 2
R Daten aus xml lesen und in Strings speichern XML & JSON 4
R xml mit Jdom lesen und als Jtree anzeigen. XML & JSON 9
J Jdom Elemente lesen XML & JSON 5
thE_29 Vor dem ersten Posten bitte lesen! XML & JSON 0
D Int-Werte in XML-Datei schreiben (DOM) XML & JSON 2
W XPath schreiben XML & JSON 1
N Java XML schreiben funktioniert nicht XML & JSON 1
L Mit Hilfe von POI eine Tabelle ohne Rahmen in Word schreiben XML & JSON 2
J XML als stream schreiben? XML & JSON 2
M JAXB: automatisches Groß schreiben Property XML & JSON 9
L Datenstruktur in XML-File schreiben XML & JSON 2
G DXF-File schreiben XML & JSON 17
B Validierung nur beim einlesen oder auch beim schreiben? XML & JSON 4
C DOM: Attribute nicht in alphabetischer Reihenfolge schreiben XML & JSON 3
T Schreiben einer XML XML & JSON 8
J wert IN einem tag einlesen/schreiben XML & JSON 4
K '&' in xml schreiben XML & JSON 2
G Problem beim schreiben von XML in eine File XML & JSON 2
sylo DOM Document in XML Datei schreiben XML & JSON 5
J xmlencoder Zustände einer Bean schreiben XML & JSON 3
B eigentlich einfach nur XML schreiben XML & JSON 3
L Objekt Serialisierung: Schreiben aller Attribute erzwingen XML & JSON 5
A JDOM: Wert schreiben bzw. ändern XML & JSON 6
M DOM, Werte mit setAttribute in XML schreiben XML & JSON 3
B XML einlesen und in Datenbank schreiben XML & JSON 1
D Tabs/Einrückungen der XML-Elemente gehen beim Schreiben verloren XML & JSON 5
J XML - schreiben und einlesen (Schema) XML & JSON 14
G Wie Attribute aus XML in ein Model schreiben (StAX)? XML & JSON 7
K XML-schreiben aus ResultSet dauert zu lange XML & JSON 10
G Mit JAXP in eine Datei schreiben XML & JSON 2
R XML-Datei schreiben - InstantiationException XML & JSON 2
Z DOM: Attribute in Knoten schreiben XML & JSON 2
S XMl Dateien in Java schreiben XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben