
Sources JavaConsultez toutes les sources
Nombre d'auteurs : 29, nombre de sources : 134, création le 13 avril 2013
Sommaire→Flux, fichiers et réseaux→XML- Exemple de parsing XML avec SAX
- Exemple de création d'un bean Java à partir d'un XML avec SAX
- Exemple de gestion d'erreurs lors d'un parsing SAX
- Exemple de lecture d'un fichier XML avec DOM
- Exemple d'extraction d'informations sur un DOM
- Extraction des liens d'un XHTML avec l'API DOM
- Exemple de création d'un DOM
- Création d'un fichier XML avec SAX et XSLT
- Création d'un HTML à partir d'un XML avec XSLT
- Création d'un PDF avec FOP
- Création et lecture d'un arbre DOM
- Enregistrer des objets en XML : Sérialisation JavaBeans
- Exemple XPath
- Récupération d'un NodeSet avec XPath
- Récupération d'un Node avec XPath
- Récupération d'un Boolean avec XPath
- Récupération d'un String avec XPath
- Récupération d'un Number avec XPath
- XPathUtils
Exemple simple de configuration d'un parseur SAX pour lire un fichier XML.
Exemple de création d'un bean Java (Personne) à partir d'un XML avec SAX (grâce à un handler spécialisé : PersoneHandler).
Exemple de gestion d'erreurs lors d'un parsing SAX, grâce à un ErrorHandler.
Exemple simple de lecture d'un fichier XML avec L'API DOM
Exemple d'extraction d'informations sur un DOM : version XML, encoding, configuration DOM, etc..
Exemple de création de toutes pièces d'un DOM et sauvegarde sous forme de fichier XML avec XSLT.
Exemple de création d'un fichier XML avec l'API SAX et XSLT.
Exemple de création d'un HTML à partir d'un fichier XML avec XSLT
Exemple de création d'un fichier PDF, à partir d'un fichier XML, avec FOP
Résumé de la structure voulue : une structure comme un document XML, avec des noeuds (Node) qui ont des propriétés, qui peuvent avoir des enfants, profondeur et nombre d'enfants illimités.
On utilise org.w3c.dom.*.
Node est une interface.
Element est une autre interface, Node est une superinterface de Element.
Un Element possède des attributs (concrètement : les attributs dans un fichier XML)
Le code pour créer l'arborescence.
import org.w3c.dom.*;
//Les 5 import suivants si on veut exporter en XML...
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class Test
{
public static void main(String[] args) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
//crée un Node racine
Node racine = document.createElement("Racine");
//et l'ajoute au document...
document.appendChild(racine);
//Maintenant on ajout noeud1 à la racine
Node noeud1 = ajoutNoeud(racine,"aaa", "1er noeud");
//et un fils à noeud1
ajoutNoeud(noeud1,"bbb", "Enfant du 1er noeud");
//Un 2e noeud à la racine
Node noeud2 = ajoutNoeud(racine,"ccc", "2e noeud");
//Avec 2 fils...
ajoutNoeud(noeud2,"ddd", "Ainé du 2e noeud");
ajoutNoeud(noeud2,"eee", "Cadet du 2e noeud");
ajoutNoeud(noeud2,"fff", "Dernier enfant du 2e noeud");
//Pour transformer en XML, ça permet de voir si le document est bien construit
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.transform(new DOMSource(document),new StreamResult(new File("toto.xml")));
//
//Pour parcourir le document et l'afficher
System.out.println(affichage(document.getFirstChild(), 0));
}
public static Node ajoutNoeud(Node parent, String valeur1, String valeur2)
{
Element element = parent.getOwnerDocument().createElement("Noeud");
element.setAttribute("code",valeur1);
element.setAttribute("texte",valeur2);
parent.appendChild(element);
return element;
}
/**
* Parcours par récurrence le noeud N, pour afficher ou faire tout autre
* traitement sur l'arborescence
* @param Node N le noeud à afficher
* @param int profondeur pour connaître la profondeur où on est
*/
public static String affichage(Node N, int profondeur) {
String ret = "";
Node fils;
if (N != null) {
if (N.hasChildNodes()) {
//Premier enfant
fils = N.getFirstChild();
while (fils != null) {
//ici le traitement spécifique
ret += "\n";
for (int i = 0; i <= profondeur; i++)
ret += "\t";
//Pour récupérer la valeur d'un attribut :
ret += ((Element)fils).getAttribute("code")
+ " " + ((Element)fils).getAttribute("texte");
//récurrence : affiche les enfants de fils.
ret += affichage(fils, profondeur + 1);
//Passe au frère suivant
fils = fils.getNextSibling();
}
}
}
return ret;
}
}
Le XML obtenu est :
<?xml version="1.0" encoding="UTF-8"?>
<Racine>
<Noeud code="aaa" texte="1er noeud">
<Noeud code="bbb" texte="Enfant du 1er noeud"/>
</Noeud>
<Noeud code="ccc" texte="2e noeud">
<Noeud code="ddd" texte="Ainé du 2e noeud"/>
<Noeud code="eee" texte="Cadet du 2e noeud"/>
<Noeud code="fff" texte="Dernier enfant du 2e noeud"/>
</Noeud>
</Racine>
La fonction affichage retourne :
aaa 1er noeud
bbb Enfant du 1er noeud
ccc 2e noeud
ddd Ainé du 2e noeud
eee Cadet du 2e noeud
fff Dernier enfant du 2e noeud
Pour tout ceux qui se demandaient si on pouvait enregistrer des objets en XML sans passer par le format binaire de sérialisation habituel, voici une petite source qui va vous permettre de le faire ! Attention, la sérialisation XML n'est pas tout à fait l'équivalent de la sérialisation binaire utilisée par beaucoup de mécanismes Java, tout cela est précisé dans les sources. Avec la sérialisation XML (-> JavaBeans) vous ne pouvez pas faire autant qu'avec la sérialisation habituelle, le seul avantage : le fichier de sortie est lisible ...
Enjoy it !
@+
Exemple simple d'utilisation du package javax.xml.xpath.
Exemple de récupération d'un NodeSet (NodeList) avec XPath. Cet exemple se "connecte" au flux RSS du blog de developpez.com pour en récupérer les titres des articles publiés.
Exemple de récupération d'un Node unique avec XPath. Cet exemple se "conecte" au flux RSS du blog de develoçppez.com pour récupérer le titre du dernier article publié.
Exemple de récupération d'un booléen à partir d'une expression XPath. L'exemple se connecte au flux RSS publié par le blog de developpez;com puis indique si le dernier article publié appartient à la rubrique Java.
Exemple de récupération d'une chaîne de caractères à partir d'une expression XPath. L'exemple se connecte au flux RSS publié par le blog de developpez.com, récupère le contenu du dernier article publié et l'affiche dans une JTextPane.
Exemple e récupération d'n nombre à partir d'une expression XPath. L'exemple se connecte au flux RSS publié par le blog de developpez.com et compte le nombre d'articles parlant de J2EE dans la rubrique Java.
XPathUtils est une petite classe utilitaire contenant une seule méthode publique statique getXPath(). Cette méthode renvoie une chaîne contenant une expression XPath permettant d'accéder au noeud passé en paramètre, en partant de la racine de l'arbre DOM. Le noeud passé en paramètre peut être un élément, un attribut, un commentaire, un noeud texte ou la racine du document.



