Modifier un fichier XML en Java – (DOM Parser)

Dans ce tutoriel nous allons découvrir comment modifier un fichier XML en Java en utilisant DOM Parser.

Nous allons voir comment :

  • Ajouter un nouvel élément
  • Modifier l’attribut d’un élément existant
  • Modifier la valeur d’un élément existante
  • Supprimer un élément existant

 
 

Exemple:

Nous allons travailler sur le fichier XML suivant (test.xml):

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

   
      alex
      25
      
paris

 
Maintenant, nous allons mettre à jour le fichier XML ci-dessus via DOM XML Parser.

1- Modifier l’attribut employee id="1"
 

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;

public class Main {

	public static void main(String argv[]) {

	   try {
		   String file = "c:\\test.xml";
		   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		   DocumentBuilder db = dbf.newDocumentBuilder();
		   Document doc = db.parse(file);

		   // Récupérer l'élément racine
		   Node entreprise = doc.getFirstChild();

		   // Récupérer l'élément employee
		   Node employee = doc.getElementsByTagName("employee").item(0);

		   // Modifier l'attribut employee id="1" à id="5"
		   NamedNodeMap attr = employee.getAttributes();
		   Node node = attr.getNamedItem("id");
		   node.setTextContent("5");

		   // écrire le contenu dans le fichier xml spécifié
		   TransformerFactory tf = TransformerFactory.newInstance();
		   Transformer transformer = tf.newTransformer();
		   DOMSource src = new DOMSource(doc);
		   StreamResult res = new StreamResult(new File(file));
		   transformer.transform(src, res);

	   } catch (Exception e) {
		   e.printStackTrace();
	   }
	}
}

 
Résultat:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

   
      alex
      25
      
paris

 
 
2- Modifier la valeur de l’age à 30

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;

public class Main {

	public static void main(String argv[]) {

	   try {
		   String file = "c:\\test.xml";
		   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		   DocumentBuilder db = dbf.newDocumentBuilder();
		   Document doc = db.parse(file);

		   // Récupérer l'élément racine
		   Node entreprise = doc.getFirstChild();

		   // Récupérer l'élément employee
		   Node employee = doc.getElementsByTagName("employee").item(0);

		   // Récupérer la liste des nœuds fils de employee
		   NodeList list = employee.getChildNodes();

		   for (int i = 0; i < list.getLength(); i++) {
		       Node node = list.item(i);
	    	   // Récupérer l'élément age et modifier la valeur
		       if ("age".equals(node.getNodeName())) {
			        node.setTextContent("30");
		       }
		   }

		   // écrire le contenu dans un fichier xml
		   TransformerFactory tf = TransformerFactory.newInstance();
		   Transformer transformer = tf.newTransformer();
		   DOMSource src = new DOMSource(doc);
		   StreamResult res = new StreamResult(new File(file));
		   transformer.transform(src, res);

	   } catch (Exception e) {
			e.printStackTrace();
	   }
	}
}

 
Résultat:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

   
      alex
      30
      
paris

 
 
3- Supprimer l’élément « name »

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;

public class Main {

	public static void main(String argv[]) {

	   try {
		   String file = "c:\\test.xml";
		   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		   DocumentBuilder db = dbf.newDocumentBuilder();
		   Document doc = db.parse(file);

		   // Récupérer l'élément racine
		   Node entreprise = doc.getFirstChild();

		   // Récupérer l'élément employee
		   Node employee = doc.getElementsByTagName("employee").item(0);

		   // Récupérer la liste des nœuds fils de employee
		   NodeList list = employee.getChildNodes();

		   for (int i = 0; i < list.getLength(); i++) {
		       Node node = list.item(i);
		       //Supprimer l'élément name
		       if ("name".equals(node.getNodeName())) {
		           employee.removeChild(node);
		       }
		   }

		   // écrire le contenu dans un fichier xml
		   TransformerFactory tf = TransformerFactory.newInstance();
		   Transformer transformer = tf.newTransformer();
		   DOMSource src = new DOMSource(doc);
		   StreamResult res = new StreamResult(new File(file));
		   transformer.transform(src, res);

	   } catch (Exception e) {
			e.printStackTrace();
	   }
	}
}

 
Résultat:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

   
      30
      
paris

 
 
4- Ajouter un nouvel élément « fonction »

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;

public class Main {

	public static void main(String argv[]) {

	   try {
		   String file = "c:\\test.xml";
		   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		   DocumentBuilder db = dbf.newDocumentBuilder();
		   Document doc = db.parse(file);

		   // Récupérer l'élément racine
		   Node entreprise = doc.getFirstChild();

		   // Récupérer l'élément employee
		   Node employee = doc.getElementsByTagName("employee").item(0);

		   // Ajouter un nouveau nœud
		   Element fonction = doc.createElement("fonction");
		   fonction.appendChild(doc.createTextNode("commercial"));
		   employee.appendChild(fonction);

		   // écrire le contenu dans un fichier xml
		   TransformerFactory tf = TransformerFactory.newInstance();
		   Transformer transformer = tf.newTransformer();
		   DOMSource src = new DOMSource(doc);
		   StreamResult res = new StreamResult(new File(file));
		   transformer.transform(src, res);

	   } catch (Exception e) {
			e.printStackTrace();
	   }
	}
}

 
Résultat:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

   
      30
      
paris
commercial

 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *