einzelne XML Elemente editieren

xxTejaxx

Mitglied
hallo,

habe nun ein problem beim schreiben meiner xml datei.
wie ich eine xml schreibe ist klar, was mir jedoch nicht passt ist, dass ich nur finde wie ich ein neues xml erstelle aba nicht, wie ich einzelne elemente eines vorhandenen xml veraendern / ueberschreiben kann.
gibt es da eine moeglichkeit? ich moechte nicht immer riesige xml datein neuschreiben muessen, nur weil ich zum beispiel das element
Code:
<root>
<data>
   <INDEX>1</INDEX>
   <DELFLAG>0</DELFLAG>
</data>
<data>
...
</data>
...
</root>
delflag auf 1 setzen moechte.

gibt es da eine moeglichkeit direkt drueber zu schreiben?

thx
 
ok, hab das jetzt so geloest:
Code:
// helpers.java
    public static void deleteEntry(int currentIndex){
        XmlData dummy = new XmlData();
        String newValue = "1";
        for (data dummy2 : dummy.myData){
            if (dummy2.getindex().equals(currentIndex)) {
                dummy2.setDeleteFlag(newValue);
                TransformerFactory.newInstance().newTransformer().transform(new DOMSource(XmlData.dom) , new StreamResult(new FileOutputStream("save.xml")));
            }
        }
    }
Code:
// XmlData.java
import java.util.logging.*;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class XmlData {
    public static Document dom;    
    public List<data> myData = new ArrayList<data>();
    
    public XmlData() {
        myData = new ArrayList<data>();
        parseXmlFile();
        parseDocument();
    }
    
    public void parseXmlFile() {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
         DocumentBuilder db = dbf.newDocumentBuilder();
         dom = db.parse("save.xml");
      }
      catch (ParserConfigurationException pce) {
           pce.printStackTrace();
       } 
        catch (SAXException se) {
            se.printStackTrace();
        } 
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    
    }
    
    public void parseDocument() {
        Element dataElement = dom.getDocumentElement();
        NodeList nl = dataElement.getElementsByTagName("data");
        if (nl != null && nl.getLength() > 0) {
            for (int i = 0; i < nl.getLength(); i++) {
                Element el = (Element) nl.item(i);
                data d = getdata(el);
                myData.add(d);
            }
        }
    }
    
        private String getTextValue(Element ele, String tagName) {
        String textVal = null;
        NodeList nl = ele.getElementsByTagName(tagName);
        if (nl != null && nl.getLength() > 0) {
            Element el = (Element) nl.item(0);
            textVal = el.getFirstChild().getNodeValue();
        }

        return textVal;
    }
        
    public data getdata(Element dataElement) {
       String index = getTextValue(dataElement, "Index");
       String DeleteFlag = getTextValue(dataElement, "DeleteFlag");
...........
}
}

Code:
//data.java
package lizenzverwaltung;

public class data {
private String index;
    private String DeleteFlag;
...........
public data(String index, 
                String DeleteFlag,
............) {
this.index = index;
this.DeleteFlag = DeleteFlag;
.............}
public String getindex(){
        return index;
    }
    public void setindex(String index){
        this.index = index;
    }
    public String getDeleteFlag(){
        return DeleteFlag;
    }
    public void setDeleteFlag(String DeleteFlag){
        this.DeleteFlag = DeleteFlag;

muessen glaub ich noch exception behandlung rein, aber dann, koennte das so funktionieren? bzw. gibts effektivere methoden?
ok, xml wird neu geschrieben in die selbe file, jedoch set.deleteFlag(newValue) funktioniert so nicht.
wird nicht uebernommen, er schreibt nur den alten wert wieder rein. ?
auch bei XmlData.dom.createElement("data"); reagiert er hinterher bei meiner ausfuehrung nicht. er schreibt immer nur das urspruengliche document ohne veraenderung *help*
 
Zuletzt bearbeitet:
Zurück