XML neuen Wert setzen



  • hallo,
    ich habe eine XMl Datei mit import org.w3c.dom.* erstellt. diese sieht wie folgt aus.

    <?xml version="1.0" ?>
    <Bordero>
    <CurrentNo>1</CurrentNo>
    </Bordero>

    Jedoch möchte ich jedes mal wenn sie die CurrentNo ändert diese in der XML datei aktualisieren. Wie kann ich das machen. So eine Datei zu erstellen ist ja nicht schwer gewesen aber ich weiß einfach nicht wie ich auf CurrentNo zugreifen kann un den Wert zum Beispiel von 1 auf 10 ändern.



  • Hallo,

    hier mal ein Beispiel:

    // erstmal eine neue Factory erstellen:
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    //factory.setNamespaceAware(true); 
    //factory.setValidating(true);
    
    // 1. Argument ist die XML-Datei in der dein XML gespeichert ist
    File f = new File(argv[0]);
    
    // neuen DocumntBuilder
    DocumentBuilder builder = factory.newDocumentBuilder();
    
    // die XML-Datei parsen
    Document document = builder.parse(f);
    
    // hole eine Liste aller "CurentNo"-Tags
    NodeList list = document.getElementsByTagName("CurrentNo");
    
    // das erste Element in der Liste holen     
    Node node = list.item(0);    
    
    // den Textknoten des CurrentNo-Elements holen     
    Text value = (Text)node.getFirstChild();
    
    // neuen Wert setzen -> 2. Kommandozeilenargument    
    value.setData(argv[1]);    
    
    // den veränderten DOM-Baum wieder in die XML_Datei zurückschreiben       
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    
    DOMSource source = new DOMSource(document);
    
    StreamResult result = new StreamResult(f);
    transformer.transform(source, result);
    

    Wenn du das Ganze nun in eine Test-Klasse z.B. "test.java" einbaust (Exceptions abfangen nicht vergessen -> siehe API) und dein XML z.B. in "datei.xml" speicherst, dann kannst du das folgendermaßen testen:

    java test datei.xml 10

    => <CurrentNo>1</CurrentNo> wird dann auf <CurrentNo>10</CurrentNo> gesetzt.

    MfG


Anmelden zum Antworten