web-dev-qa-db-fra.com

Créer un fichier XML en utilisant Java

Comment créer un fichier XML et le sauvegarder à un endroit de ma machine en utilisant Java ... y at-il également des attributs dans le fichier XML? J'ai trouvé org.w3c.dom.Document, mais je ne pouvais pas créer d'attributs pour les éléments et enregistrer le fichier XML.

Je vous remercie.

35
Harshana

Vous pouvez utiliser un analyseur XML DOM pour créer un fichier XML à l'aide de Java. Un bon exemple peut être trouvé sur ce 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();
}
29
monica bubna

Vous pouvez utiliser Xembly , une petite bibliothèque open source qui rend ce processus de création XML beaucoup plus intuitif:

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

Xembly encapsule le DOM Java natif et constitue une bibliothèque très légère.

7
yegor256

Regardez dom4j ou jdom . Les deux bibliothèques permettent de créer un document et d’imprimer le document au format XML. Les deux sont largement utilisés, assez faciles à utiliser et vous trouverez beaucoup d'exemples et d'extraits.

dom4j - Guide de démarrage rapide

3
Andreas_D

Il est également arrivé que cela fonctionne aussi, utilisez https://www.tutorialspoint.com/Java_xml/Java_dom_create_document.htm l’exemple ci-dessous et lisez les explications. Aussi je vous donne mon propre exemple:

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

C’est dans le contexte de l’utilisation du tokenizer de Stanford pour le traitement du langage naturel, une partie de celle-ci permettant de se faire une idée sur la façon d’ajouter des éléments . Le résultat est le suivant: Billbuyedapples (J'ai lu la phrase d’un fichier)

2
student0495

Je fournis une réponse de mon propre blog . J'espère que cela aidera.

Quel sera le résultat?

Le fichier XML suivant, nommé users.xml, sera créé.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<users>
    <user uid="1">
        <firstname>Interview</firstname>
        <lastname>Bubble</lastname>
        <email>[email protected]</email>
    </user>
</users>

PROC&EACUTE;DURE

Les étapes de base, afin de créer un fichier XML avec un analyseur DOM, sont les suivantes:

  1. Créez une instance DocumentBuilder.

  2. Créez un document à partir de la DocumentBuilder ci-dessus.

  3. Créez les éléments souhaités à l'aide de la classe Element et de sa méthode appendChild.

  4. Créez une nouvelle instance Transformer et une nouvelle instance DOMSource.

  5. Créez une nouvelle StreamResult dans le flux de sortie que vous souhaitez utiliser.

  6. Utilisez la méthode transform pour écrire l’objet DOM dans le flux de sortie.

CODE SOURCE:

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.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
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, 
                                               TransformerException
    {
     // 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("[email protected]"));
    user.appendChild(email);   

    // write content into xml file   

    // 4. Create a new Transformer instance and a new DOMSource instance.
   TransformerFactory transformerFactory = TransformerFactory.newInstance();
   Transformer transformer = transformerFactory.newTransformer();
   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.
   transformer.transform(source, result);  

   System.out.println("File created successfully");
 }
}

OUTPUT:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
  <user uid="1">
     <firstName>Interview</firstName>
     <lastName>Bubble</lastName>
     <email>[email protected]</email>
  </user>
</users>
1
Arayan Singh

Vous voudrez peut-être donner XStream un coup, ce n’est pas compliqué. Il fait essentiellement le gros du travail.

1
npinti

J'ai aimé la syntaxe Xembly, mais ce n'est pas une API statiquement typée. Vous pouvez l'obtenir avec 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);
}

Mon expérience est que cela fonctionne très bien même quand le XML devient plus compliqué. Vous pouvez simplement découpler la structure XML de votre structure de code Java.

0
Cfx