Avatar billede max-w Nybegynder
29. november 2003 - 18:43 Der er 7 kommentarer og
1 løsning

At ændre node value via java

Hvordan kan jeg ændre en node_værdi i en eksisterende XML. jeg parser med dom.
Avatar billede arne_v Ekspert
29. november 2003 - 18:47 #1
Finde noden og kalder setNodeValue på den.

Har du brug for et eksempel ?
Avatar billede arne_v Ekspert
29. november 2003 - 18:48 #2
(du skal selvfølgelig også skrive dit DOM træ ud til fil men det antager jeg
at du har fod på)
Avatar billede max-w Nybegynder
29. november 2003 - 18:51 #3
Ja tak, en eksempel.
Avatar billede max-w Nybegynder
29. november 2003 - 18:53 #4
Jeg har prøvet at finde noden og kalder setNodeValue på den. virker ikke.
meget gerne se et eksampel.
Avatar billede arne_v Ekspert
29. november 2003 - 18:57 #5
Kode:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
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;

import org.apache.xml.serialize.XMLSerializer;

public class DomTest6 {
  private final static String XML_FILE = "C:\\domtest.xml";
  public static void main(String[] args) {
      writeXml(XML_FILE);
      readXml(XML_FILE);
  }
  private static void writeXml(String filename) {
      try {
        PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
        pw.println("<?xml version='1.0' standalone='yes'?>");
        pw.println("<list>");
        pw.println("<elm>");
        pw.println("<key>1</key>");
        pw.println("<val>a</val>");
        pw.println("</elm>");
        pw.println("<elm>");
        pw.println("<key>2</key>");
        pw.println("<val>bb</val>");
        pw.println("</elm>");
        pw.println("<elm>");
        pw.println("<key>3</key>");
        pw.println("<val>ccc</val>");
        pw.println("</elm>");
        pw.println("</list>");
        pw.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      }
  }
  private static void readXml(String filename) {
      try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new File(filename));
        NodeList elements = doc.getElementsByTagName("elm");
        for (int i = 0; i < elements.getLength(); i++) {
            Node element = elements.item(i);
            NodeList subelements = element.getChildNodes();
            for(int j = 0; j < subelements.getLength(); j++) {
              String tag = subelements.item(j).getNodeName();
              if(tag.equals("val")) {
                  if(subelements.item(j).getFirstChild().getNodeValue().equals("ccc")) {
                    subelements.item(j).getFirstChild().setNodeValue("notccc");                     
                  }
              }
            } 
        }
        XMLSerializer ser = new XMLSerializer(System.out, null);
        ser.serialize(doc.getDocumentElement());
      } catch (FactoryConfigurationError e) {
        e.printStackTrace();
      } catch (ParserConfigurationException e) {
        e.printStackTrace();
      } catch (SAXException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
      return;
  }
}
Avatar billede arne_v Ekspert
29. november 2003 - 18:58 #6
Output:

<?xml version="1.0"?>
<list> <elm> <key>1</key> <val>a</val> </elm> <elm> <key>2</key> <val>bb</val> </elm> <elm> <key>3</key> <val>notccc</val> </elm> </list>
Avatar billede arne_v Ekspert
29. november 2003 - 18:58 #7
Der står notccc i.s.f. de oprindelige ccc.
Avatar billede max-w Nybegynder
29. november 2003 - 19:02 #8
Mange tak jeg prøver det. og her er 60 point
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester