Crea file XML usando java

Come creare un file xml e salvarlo in qualche posto nella mia macchina usando java..questi sono gli attributi anche nel file xml? Ho trovato org.w3c.dom.Document ma ho avuto problemi con la creazione di attributi per gli elementi e il salvataggio del file xml.

Grazie.

È ansible utilizzare un parser DOM XML per creare un file XML utilizzando Java. Un buon esempio può essere trovato su questo sito :

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 TransformsrFactory transformsrFactory = TransformsrFactory.newInstance(); Transformsr transformsr = transformsrFactory.newTransformsr(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("C:\\testing.xml")); transformsr.transform(source, result); System.out.println("Done"); }catch(ParserConfigurationException pce){ pce.printStackTrace(); }catch(TransformsrException tfe){ tfe.printStackTrace(); } 

Puoi usare Xembly , una piccola libreria open source che rende questo processo di creazione XML molto più intuitivo:

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

Xembly è un involucro attorno al DOM Java nativo ed è una libreria molto leggera.

Dai un’occhiata a dom4j o jdom . Entrambe le librerie consentono la creazione di un documento e consentono di stampare il documento come xml. Entrambi sono ampiamente utilizzati, piuttosto facili da usare e troverete molti esempi e frammenti.

dom4j – Guida rapida

Mi è capitato di lavorare anche a questo, usare https://www.tutorialspoint.com/java_xml/java_dom_create_document.htm l’esempio da qui e leggere le spiegazioni. Inoltre ti fornisco il mio esempio:

 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); } TransformsrFactory transformsrFactory = TransformsrFactory.newInstance(); Transformsr transformsr = transformsrFactory.newTransformsr(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("C:\\Users\\workspace\\Tokenizer\\tokens.xml")); transformsr.transform(source, result); // Output to console for testing StreamResult consoleResult = new StreamResult(System.out); transformsr.transform(source, consoleResult); 

Questo è nel contesto dell’utilizzo del tokenizer di Stanford per Natural Language Processing, solo una parte di esso per farsi un’idea su come aggiungere elementi. L’output è: Billbuyedapples (ho letto la frase da un file)

Potresti voler dare a XStream una possibilità, non è complicato. Fondamentalmente fa il sollevamento pesante.

Sto fornendo una risposta dal mio blog . Spero che questo ti sia d’aiuto.

Cosa verrà prodotto?

Verrà creato il seguente file XML denominato users.xml.

 < ?xml version="1.0" encoding="UTF-8" standalone="no" ?>   Interview Bubble admin@interviewBubble.com   

PROCEDURA

I passaggi di base, al fine di creare un file XML con un parser DOM, sono:

  1. Creare un’istanza DocumentBuilder .

  2. Crea un documento da DocumentBuilder sopra.

  3. Crea gli elementi che vuoi usando la class Element e il suo metodo appendChild .

  4. Crea una nuova istanza di Transformsr e una nuova istanza di DOMSource .

  5. Creare un nuovo StreamResult nel stream di output che si desidera utilizzare.

  6. Utilizzare il metodo transform per scrivere l’object DOM sul stream di output.

CODICE SORGENTE:

 package com.example.TestApp; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformsr; import javax.xml.transform.TransformsrException; import javax.xml.transform.TransformsrFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class CreateXMLFileJava { public static void main(String[] args) throws ParserConfigurationException, IOException, TransformsrException { // 1.Create a DocumentBuilder instance DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dbuilder = dbFactory.newDocumentBuilder(); // 2. Create a Document from the above DocumentBuilder. Document document = dbuilder.newDocument(); // 3. Create the elements you want using the Element class and its appendChild method. // root element Element users = document.createElement("users"); document.appendChild(users); // child element Element user = document.createElement("user"); users.appendChild(user); // Attribute of child element user.setAttribute("uid", "1"); // firstname Element Element firstName = document.createElement("firstName"); firstName.appendChild(document.createTextNode("Interview")); user.appendChild(firstName); // lastName element Element lastName = document.createElement("lastName"); lastName.appendChild(document.createTextNode("Bubble")); user.appendChild(lastName); // email element Element email = document.createElement("email"); email.appendChild(document.createTextNode("admin@interviewBubble.com")); user.appendChild(email); // write content into xml file // 4. Create a new Transformsr instance and a new DOMSource instance. TransformsrFactory transformsrFactory = TransformsrFactory.newInstance(); Transformsr transformsr = transformsrFactory.newTransformsr(); DOMSource source = new DOMSource(document); // 5. Create a new StreamResult to the output stream you want to use. StreamResult result = new StreamResult(new File("/Users/admin/Desktop/users.xml")); // StreamResult result = new StreamResult(System.out); // to print on console // 6. Use transform method to write the DOM object to the output stream. transformsr.transform(source, result); System.out.println("File created successfully"); } } 

PRODUZIONE:

 < ?xml version="1.0" encoding="UTF-8" standalone="no"?>   Interview Bubble admin@interviewBubble.com   

Mi è piaciuta la syntax Xembly, ma non è un’API tipicamente statica. Puoi ottenerlo con 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); } 

La mia esperienza è che funziona alla grande anche quando l’XML diventa più complicato. Puoi semplicemente disaccoppiare la struttura XML dalla tua struttura di codice java.

 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); */ } //TransformsrFactory instance is used to create Transformsr objects. TransformsrFactory factory = TransformsrFactory.newInstance(); Transformsr transformsr = factory.newTransformsr(); transformsr.setOutputProperty(OutputKeys.INDENT, "yes"); transformsr.setOutputProperty(OutputKeys.METHOD,"xml"); // transformsr.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); transformsr.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....."); } }