2010-11-10 46 views
33

如何創建一個XML文件,並使用java..there是屬性還包括在XML文件保存在某個地方在我的機器上創建XML文件?我找到了org.w3c.dom.Document,但在爲元素創建屬性時遇到問題並保存了xml文件。用java

謝謝。

回答

3

已經看清楚了dom4jjdom。這兩個庫都允許創建一個Document,並允許將該文檔打印爲xml。兩者都使用,很容易使用,你會發現很多的例子和片段。

dom4j - Quick start guide

+0

的dom4j是簡單和冷靜,但它尚未爲多年的更新。 – 2015-05-04 12:27:01

1

你可能想給XStream一個鏡頭,它並不複雜。它基本上完成了繁重的工作。

+0

此URL需要用戶名/密碼。 – 2015-07-20 18:05:14

+0

@ james.garriss:鏈接已修改。 – npinti 2015-07-20 20:00:02

+0

「XStream是一個簡單的庫,用於將對象序列化爲XML並返回。」 – 2015-07-21 11:26:27

26

一個例子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

漂亮的代碼;它有什麼作用? – 2011-09-08 21:25:28

+1

xml'String'看起來像什麼?請在代碼前加入。 – kasavbere 2012-10-13 17:36:40

+15

來源:http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/ – pgratton 2012-10-16 19:57:27

-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

漂亮的代碼;它有什麼作用? – 2011-09-08 21:26:19

+7

你稱它很漂亮? – yegor256 2012-10-19 11:13:12

+5

SQL與此有什麼關係? – 2013-03-01 19:39:37

6

您可以使用Xembly,一個小型的開源庫,使這個XML創建過程更加直觀:

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

Xembly是圍繞一個包裝本地Java DOM,並且是一個非常輕量級的庫。

+1

我希望他在3年後解決了這個問題;) – 2013-10-13 13:43:08

+11

@DanielAbouChleih,我在4年後來到這裏,發現這個答案很有用。 – 2014-05-15 11:23:56

0

我喜歡的Xembly語法,但它不是一個靜態類型的API。你可以用XMLBeam得到這樣的:

// 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); 
} 

我的經驗是,即使當XML變得更爲複雜,這個偉大的工程。您可以將XML結構從Java代碼結構中分離出來。

2

就發生在這個工作也使用https://www.tutorialspoint.com/java_xml/java_dom_create_document.htm從這裏的例子,並閱讀說明。我也爲你提供我自己的例子:

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); 

這是使用來自斯坦福自然語言處理,只是它的一部分的分詞就如何添加元素的想法的情況下。 輸出是:Billbuyedapples(我已經從文件中讀取的句子)