Avatar billede pcdl Nybegynder
11. maj 2010 - 09:46 Der er 3 kommentarer

xml find attribute ændre værdi og gem

Hvordan åbner jeg et xml document finder en attribute med værdien 1 og ændre den til 2 også gemmer filen igen
Avatar billede arne_v Ekspert
11. maj 2010 - 14:59 #1
Jeg ville laese XML ind i et W3C DOM document, finde attributten med XPath, aendre den og gemme dokumentet igen.
Avatar billede arne_v Ekspert
11. maj 2010 - 19:30 #2
Eksempel:

package may;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import org.xml.sax.SAXException;

public class XmlMod {
    public static void createFile(String fnm) throws IOException {
        PrintWriter pw = new PrintWriter(new FileWriter(fnm));
        pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        pw.println("<data>");
        pw.println("    <x a=\"177\"/>");
        pw.println("</data>");
        pw.close();
    }
    public static void displayFile(String fnm) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fnm));
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
    private static void changeFile(String oldfnm, int oldattr, String newfnm, int newattr) throws ParserConfigurationException, SAXException, IOException, ClassCastException, ClassNotFoundException, InstantiationException, IllegalAccessException, XPathExpressionException {
        // read
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(oldfnm);
        // change
        XPath xpath = XPathFactory.newInstance().newXPath();
        Element x = (Element)xpath.evaluate("/data/x[@a=" + oldattr + "]", doc.getDocumentElement(), XPathConstants.NODE);
        x.setAttribute("a", Integer.toString(newattr));
        // write
        DOMImplementation impl = DOMImplementationRegistry.newInstance().getDOMImplementation("XML 3.0");
        DOMImplementationLS feature = (DOMImplementationLS)impl.getFeature("LS","3.0");
        LSSerializer ser = feature.createLSSerializer();
        LSOutput output = feature.createLSOutput();
        output.setCharacterStream(new PrintWriter(newfnm));
        ser.write(doc, output);


    }
    public static void main(String[] args) throws Exception {
        createFile("C:\\bef.xml");
        displayFile("C:\\bef.xml");
        changeFile("C:\\bef.xml", 177, "C:\\aft.xml", 299);
        displayFile("C:\\aft.xml");
    }
}
Avatar billede arne_v Ekspert
13. juni 2010 - 04:13 #3
OK ?
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