Avatar billede kurg Nybegynder
15. december 2007 - 22:19 Der er 5 kommentarer og
1 løsning

Find og erstat i xml dokument

Hej Jeg har brug for at lave en metode som finder og erstatter to linie i et xml dokument?

Det er disse linier:
  <property name="hostName" class="java.lang.String">localhost</property>
  <property name="portNumber" class="java.lang.Integer">8080</property>
Der skal erstattes med disse:
  <property name="hostName" class="java.lang.String">Temp1</property>
  <property name="portNumber" class="java.lang.Integer">Temp2</property>
Er det muligt at bruge Regex og hvordan vil den kode se ud?
Mange tak for hjælpen
Avatar billede arne_v Ekspert
15. december 2007 - 22:32 #1
Du kunne godt bruge regex.

Du kunne også bruge XML parser !
Avatar billede arne_v Ekspert
15. december 2007 - 22:32 #2
eksempel med regex:

public class RegexReplace {
    public static void main(String[] args) {
        String s = "<stuff>\r\n" +
                  "<blabla/>\r\n" +
                  "<property name=\"hostName\" class=\"java.lang.String\">localhost</property>\r\n" +
                  "<property name=\"portNumber\" class=\"java.lang.Integer\">8080</property>\r\n" +
                  "<blabla/>\r\n" +
                  "</stuff>\r\n";
        System.out.println(s);
        s = s.replaceAll("(<property name=\"hostName\"[^>]*>)([^<]*)(</property>)", "$1Temp1$3");
        s = s.replaceAll("(<property name=\"portNumber\"[^>]*>)([^<]*)(</property>)", "$1Temp2$3");
        System.out.println(s);
    }
}
Avatar billede kurg Nybegynder
15. december 2007 - 22:36 #3
mange tak Arne v
Avatar billede arne_v Ekspert
15. december 2007 - 22:39 #4
Og en mere XML'sk måde:

import java.io.StringReader;

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

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class XmlReplace {
    public static void main(String[] args) throws Exception {
        String s = "<stuff>\r\n" +
                  "<blabla/>\r\n" +
                  "<property name=\"hostName\" class=\"java.lang.String\">localhost</property>\r\n" +
                  "<property name=\"portNumber\" class=\"java.lang.Integer\">8080</property>\r\n" +
                  "<blabla/>\r\n" +
                  "</stuff>\r\n";
        OutputFormat fmt = new OutputFormat();
        fmt.setIndenting(true);
        XMLSerializer ser = new XMLSerializer(System.out, fmt);
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(new StringReader(s)));
        ser.serialize(doc);
        XPathAPI.selectSingleNode(doc.getDocumentElement(), "//stuff/property[@name='hostName']/text()").setTextContent("Temp1");
        XPathAPI.selectSingleNode(doc.getDocumentElement(), "//stuff/property[@name='portNumber']/text()").setTextContent("Temp2");
        ser.serialize(doc);
    }
}
Avatar billede arne_v Ekspert
15. december 2007 - 22:39 #5
og et svar fra mig
Avatar billede kurg Nybegynder
15. december 2007 - 22:40 #6
wow det er det her, jeg har brug for :-)
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