2010-11-10 18 views
33

Wie erstellt man eine XML-Datei und speichern Sie es an irgendeiner Stelle in meinem Rechner mit Java .. Gibt es auch Attribute in der XML-Datei enthalten? Ich habe org.w3c.dom.Document gefunden aber Probleme beim Erstellen von Attributen für Elemente und speichern Sie die XML-Datei.Erstellen Sie XML-Datei mit Java

Vielen Dank.

Antwort

3

Schauen Sie sich dom4j oder jdom. Beide Bibliotheken ermöglichen das Erstellen eines Dokuments und ermöglichen das Drucken des Dokuments als XML. Beide sind sehr häufig verwendet, ziemlich einfach zu bedienen und Sie finden viele Beispiele und Schnipsel.

dom4j - Quick start guide

+0

Dom4j ist einfach und cool, aber es hat seit Jahren nicht aktualisiert. –

1

Sie könnten XStream eine Chance geben wollen, ist es nicht kompliziert. Es macht im Grunde das schwere Heben.

+0

Diese URL erfordert einen Benutzernamen/ein Passwort. –

+0

@ james.garriss: Link geändert. – npinti

+0

"XStream ist eine einfache Bibliothek, um Objekte in XML und wieder zurück zu serialisieren." –

26

Ein Beispiel from this site:

try 
{ 
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

    //root elements 
    Document doc = docBuilder.newDocument(); 

    Element rootElement = doc.createElement("company"); 
    doc.appendChild(rootElement); 

    //staff elements 
    Element staff = doc.createElement("Staff"); 
    rootElement.appendChild(staff); 

    //set attribute to staff element 
    Attr attr = doc.createAttribute("id"); 
    attr.setValue("1"); 
    staff.setAttributeNode(attr); 

    //shorten way 
    //staff.setAttribute("id", "1"); 

    //firstname elements 
    Element firstname = doc.createElement("firstname"); 
    firstname.appendChild(doc.createTextNode("yong")); 
    staff.appendChild(firstname); 

    //lastname elements 
    Element lastname = doc.createElement("lastname"); 
    lastname.appendChild(doc.createTextNode("mook kim")); 
    staff.appendChild(lastname); 

    //nickname elements 
    Element nickname = doc.createElement("nickname"); 
    nickname.appendChild(doc.createTextNode("mkyong")); 
    staff.appendChild(nickname); 

    //salary elements 
    Element salary = doc.createElement("salary"); 
    salary.appendChild(doc.createTextNode("100000")); 
    staff.appendChild(salary); 

    //write the content into xml file 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 

    StreamResult result = new StreamResult(new File("C:\\testing.xml")); 
    transformer.transform(source, result); 

    System.out.println("Done"); 

}catch(ParserConfigurationException pce){ 
    pce.printStackTrace(); 
}catch(TransformerException tfe){ 
    tfe.printStackTrace(); 
} 
+8

Hübscher Code; was tut es? –

+1

Wie sieht die xml 'String' aus? Bitte vor dem Code angeben. – kasavbere

+15

Quelle: http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/ – pgratton

-4
package com.server; 

import java.io.*; 

import javax.servlet.*; 
import javax.servlet.http.*; 

import java.io.*; 
import java.sql.Connection; 
import java.sql.Date; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 


import org.w3c.dom.*; 

import com.gwtext.client.data.XmlReader; 

import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.*; 
import javax.xml.transform.stream.*; 

public class XmlServlet extends HttpServlet 
{ 

    NodeList list; 
    Connection con=null; 
    Statement st=null; 
    ResultSet rs = null; 
    String xmlString ; 
    BufferedWriter bw; 
    String displayTo; 
    String displayFrom; 
    String addressto; 
    String addressFrom; 
    Date send; 
    String Subject; 
    String body; 
    String category; 
    Document doc1; 
    public void doGet(HttpServletRequest request,HttpServletResponse response) 
    throws ServletException,IOException{ 

    System.out.print("on server"); 

    response.setContentType("text/html"); 
    PrintWriter pw = response.getWriter(); 
    System.out.print("on server"); 
    try 
    { 


    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = builderFactory.newDocumentBuilder(); 
    //creating a new instance of a DOM to build a DOM tree. 
    doc1 = docBuilder.newDocument(); 
    new XmlServlet().createXmlTree(doc1); 

    System.out.print("on server"); 

    } 
    catch(Exception e) 
    { 
    System.out.println(e.toString()); 
    } 

    } 

    public void createXmlTree(Document doc) throws Exception { 
    //This method creates an element node 

    System.out.println("ruchipaliwal111"); 

    try 
    { 

     System.out.println("ruchi111"); 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3308/plz","root","root1"); 
     st = con.createStatement(); 

     rs = st.executeQuery("select * from data"); 


     Element root = doc.createElement("message"); 
     doc.appendChild(root); 

     while(rs.next()) 
     { 



     displayTo=rs.getString(1).toString(); 
     System.out.println(displayTo+"getdataname"); 

     displayFrom=rs.getString(2).toString(); 
     System.out.println(displayFrom +"getdataname"); 

     addressto=rs.getString(3).toString(); 
     System.out.println(addressto +"getdataname"); 

     addressFrom=rs.getString(4).toString(); 
     System.out.println(addressFrom +"getdataname"); 

     send=rs.getDate(5); 
     System.out.println(send +"getdataname"); 

     Subject=rs.getString(6).toString(); 
     System.out.println(Subject +"getdataname"); 

     body=rs.getString(7).toString(); 
     System.out.println(body+"getdataname"); 

     category=rs.getString(8).toString(); 
     System.out.println(category +"getdataname"); 


     //adding a node after the last child node of ssthe specified node. 


     Element element1 = doc.createElement("Header"); 
     root.appendChild(element1); 


     Element child1 = doc.createElement("To"); 
     element1.appendChild(child1); 

     child1.setAttribute("displayNameTo",displayTo); 
     child1.setAttribute("addressTo",addressto); 

     Element child2 = doc.createElement("From"); 
     element1.appendChild(child2); 

     child2.setAttribute("displayNameFrom",displayFrom); 
     child2.setAttribute("addressFrom",addressFrom); 

     Element child3 = doc.createElement("Send"); 
     element1.appendChild(child3); 

     Text text2 = doc.createTextNode(send.toString()); 
     child3.appendChild(text2); 

     Element child4 = doc.createElement("Subject"); 
     element1.appendChild(child4); 

     Text text3 = doc.createTextNode(Subject); 
     child4.appendChild(text3); 

     Element child5 = doc.createElement("category"); 
     element1.appendChild(child5); 

     Text text44 = doc.createTextNode(category); 
     child5.appendChild(text44); 


     Element element2 = doc.createElement("Body"); 
     root.appendChild(element2); 

     Text text1 = doc.createTextNode(body); 
     element2.appendChild(text1); 

     /* 
     Element child1 = doc.createElement("name"); 
     root.appendChild(child1); 
     Text text = doc.createTextNode(getdataname); 
     child1.appendChild(text); 
     Element element = doc.createElement("address"); 
     root.appendChild(element); 
     Text text1 = doc.createTextNode(getdataaddress); 
     element.appendChild(text1); 
    */ 
     } 






//TransformerFactory instance is used to create Transformer objects. 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    Transformer transformer = factory.newTransformer(); 

    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    transformer.setOutputProperty(OutputKeys.METHOD,"xml"); 
    // transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3"); 


    // create string from xml tree 
    StringWriter sw = new StringWriter(); 
    StreamResult result = new StreamResult(sw); 
    DOMSource source = new DOMSource(doc); 
    transformer.transform(source, result); 

    xmlString = sw.toString(); 


    File file = new File("./war/ds/newxml.xml"); 
    bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); 
    bw.write(xmlString); 
    } 

    catch(Exception e) 
    { 
     System.out.print("after while loop exception"+e.toString()); 
    } 

    bw.flush(); 
    bw.close(); 
    System.out.println("successfully done....."); 
    } 
} 
+3

Ziemlich Code; was tut es? –

+7

Sie nennen es hübsch ?? – yegor256

+5

Was zum Teufel hat SQL damit zu tun ?? –

6

Sie Xembly verwenden können, eine kleine Open-Source-Bibliothek, die diese XML-Erstellung Prozess viel intuitiver macht:

String xml = new Xembler(
    new Directives() 
    .add("root") 
    .add("order") 
    .attr("id", "553") 
    .set("$140.00") 
).xml(); 

Xembly ist ein Wrapper um natives Java-DOM und ist eine sehr leichte Bibliothek.

+1

Ich hoffe, er löste das Problem nach 3 Jahren;) –

+11

@DanielAbouChleih, ich kam hier nach _4 Jahren_ und fand diese Antwort nützlich. –

0

Ich mochte die Xembly-Syntax, aber es ist keine statisch typisierte API. Sie können dies mit XMLBeam erhalten:

// Declare a projection 
public interface Projection { 

    @XBWrite("/root/order/@id") 
    Projection setID(int id); 

    @XBWrite("/root/order") 
    Projection setValue(String value); 
} 

public static void main(String[] args) { 
    // create a projector 
    XBProjector projector = new XBProjector(); 

    // use it to create a projection instance 
    Projection projection = projector.projectEmptyDocument(Projection.class); 

    // You get a fluent API, with java types in parameters 
    projection.setID(553).setValue("$140.00"); 

    // Use the projector again to do IO stuff or create an XML-string 
    projector.toXMLString(projection); 
} 

Meine Erfahrung ist, dass dies funktioniert gut, auch wenn die XML komplizierter wird. Sie können die XML-Struktur einfach von Ihrer Java-Code-Struktur entkoppeln.

2

Gerade passiert, um an diesem auch arbeiten, verwenden Sie https://www.tutorialspoint.com/java_xml/java_dom_create_document.htm das Beispiel von hier, und lesen Sie die Erklärungen. Biete ich Ihnen auch mein eigenes Beispiel:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.newDocument(); 
     // root element 


Element rootElement = doc.createElement("words"); 
      doc.appendChild(rootElement); 
while (ptbt.hasNext()) { 
       CoreLabel label = ptbt.next(); 
       System.out.println(label); 

       m = r1.matcher(label.toString()); 
       //System.out.println(m.find()); 
       if (m.find() == true) { 
        Element w = doc.createElement("word");     
        w.appendChild(doc.createTextNode(label.toString())); 
        rootElement.appendChild(w); 
       } 

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result = new StreamResult(new File("C:\\Users\\workspace\\Tokenizer\\tokens.xml")); 
     transformer.transform(source, result); 
     // Output to console for testing 
     StreamResult consoleResult = new StreamResult(System.out); 
     transformer.transform(source, consoleResult); 

Dies ist im Zusammenhang mit der tokenizer von der Stanford für Maschinelle Sprachverarbeitung verwendet wird, nur ein Teil davon eine Idee zu machen, wie die Elemente hinzuzufügen. Die Ausgabe ist: Billbuyedapples (Ich habe den Satz aus einer Datei gelesen)

Verwandte Themen