Lisez le fichier XML local et analysez-le via DOM. La caractéristique de l'analyse DOM est de charger l'intégralité du fichier XML dans la mémoire pour former une structure arborescente DOM. La structure arborescente est pratique pour le parcours et la manipulation.
La caractéristique de l'analyse DOM est de lire le fichier XML, de le convertir en une arborescence dom, et de parcourir les nœuds.
C'est le concept de nœuds du W3c
Si le XML contient une grande quantité de données, DOM n'est pas adapté à l'analyse du XML contenant une grande quantité de données en raison de la caractéristique de chargement du XML dans la mémoire en une seule fois. Lorsqu'une grande quantité de XML est incluse, l'analyse avec SAX économise de la mémoire.
Voici un exemple d'utilisation de DOM pour analyser des fichiers XML :
La structure du fichier XML est la suivante :
<?xml version="1.0" encoding="ISO-8859-1"?><librairie> <bookcategory="cooking"> <title lang="fr">Italien de tous les jours</title> <author>Giada De Laurentiis </auteur> <année>2005</année> <prix>30,00</prix> </livre> <bookcategory="enfants"> <title lang="fr">Harry Potter</title> <auteur>J K. Rowling</auteur> <année>2005</année> <prix>29,99</prix> </book> <bookcategory="web"> <title lang="fr">XQuery Kick Start</title> <auteur>James McGovern</ auteur> <année>2003</année> <prix>49,99</prix> </book> <bookcategory="web" cover="paperback"> <title lang="fr">Apprendre XML</title> < auteur>Erik T. Ray</auteur> <année>2003</année> <prix>39,95</prix> </book></librairie>
Créez une classe pour analyser XML comme suit :
package xml.dom; importer java.io.File; importer javax.xml.parsers.DocumentBuilder; importer javax.xml.parsers.DocumentBuilderFactory; importer org.w3c.dom.Document; importer org.w3c.dom.Element; importer org .w3c.dom.Node; importer org.w3c.dom.NodeList; classe publique ReadXmlFile { public static void main(String[] args) { try{ File xmlFile = new File("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); Document doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Élément racine : "+doc.getDocumentElement().getNodeName()); 0 ; i<nList.getLength();i++){ Node node = nList.item(i); System.out.println("Nom du nœud : "+ node.getNodeName()); Element ele = (Element)node System.out.println("---------------- ------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("catégorie de livre : "+ ele.getAttribute("catégorie")) ; System.out.println("nom du titre : "+ ele.getElementsByTagName("titre").item(0).getTextContent()); System.out.println("nom de l'auteur : "+ele.getElementsByTagName("auteur").item(0).getTextContent()); System.out.println("année :"+ele.getElementsByTagName("année").item(0).getTextContent()); System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent() ); System.out.println("--------------------"); } }
Résultats d'analyse :
Élément racine : librairieNom du nœud : livre--------------------------catégorie de livre : cuisinenom du titre : Everyday Italiannom de l'auteur : Giada De Laurentiisannée : 2005prix : 30,00 -------------------------Nom du nœud : livre------------------ --- -------catégorie de livre : enfantsnom du titre : Harry Potternom de l'auteur : J K. Rowlingannée :2005prix : 29.99----------------------- -- Nom du nœud : livre-------------------------catégorie de livre : nom du titre Web : XQuery Kick Startauthor nom : James McGovernannée :2003prix : 49,99-----------------------------Nom du nœud : livre------------- ---------------catégorie de livre : nom du titre Web : Learning XMLnom de l'auteur : Erik T. Rayannée : 2003prix : 39,95----------------- ---------
Ce qui précède consiste à obtenir la valeur correspondante via le nom.
Ce qui suit est généré à l'aide de nœuds de boucle :
Le code du mode de sortie du nœud de boucle est le suivant :
package xml.dom; importer java.io.File; importer javax.xml.parsers.DocumentBuilder; importer javax.xml.parsers.DocumentBuilderFactory; importer org.w3c.dom.Document; importer org.w3c.dom.NamedNodeMap; importer org .w3c.dom.Node;importer org.w3c.dom.NodeList ; public class ReadXmlFile2 { public static void main(String[] args) { try{ File xmlFile = new File("src/resource/book.xml"); ; DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Élément racine : "+doc.getDocumentElement().getNodeName()); (doc.getChildNodes()); } }catch(Exception e){ e.printStackTrace(); } public static void printNode(NodeList nodeList){ System.out.println("------------------------"); // System.out.println(nodeList. getLength()); for(int i = 0; i<nodeList.getLength(); i++){ Node node = (Node)nodeList.item(i); if(node.getNodeType() == Node.ELEMENT_NODE){ System.out.println("nom du nœud : "+node.getNodeName()); System.out.println("valeur du nœud : "+node.getTextContent()); if(node.hasAttributes()){ NamedNodeMap nodeMap = node.getAttributes(); for(int j = 0; j < nodeMap.getLength(); j++){ Noeud nodenew = nodeMap.item(j); System.out.println("nom du nœud "+nodenew.getNodeName()); System.out.println("valeur du nœud "+nodenew.getNodeValue()); ()){ printNode(node.getChildNodes());
Le résultat est le suivant :
Élément racine : librairie------------------------nom du nœud : bookstorenode valeur : Italien de tous les jours Giada De Laurentiis 2005 30,00 Harry Potter J K. Rowling 2005 29,99 XQuery Kick Start James McGovern 2003 49,99 Apprentissage XML Erik T. Ray 2003 39,95 ------------------nom du nœud : valeur du nœud du livre : Italien de tous les jours Giada De Laurentiis 2005 30.00 nom du nœud catégorievaleur du nœud cuisine------------------------nom du nœud : titrevaleur du nœud : Tous les jours Italiannode nom langnode valeur en------- ------------------nom du nœud : valeur du nœud d'auteur : Giada De Laurentiis----------------------- - nom du nœud : année valeur du nœud : 2005------------------------nom du nœud : prix valeur du nœud : 30,00---------------- - ------------nom du nœud : valeur du nœud du livre : Harry Potter J K. Rowling 2005 29,99 nom du nœud catégorievaleur du nœud enfants------------------------nom du nœud : titre valeur du nœud : Harry Potternom du nœud valeur langnode en-------- ----------------nom du nœud : valeur du nœud d'auteur : J K. Rowling------------------------ ---- nom du nœud : année valeur du nœud : 2005------------------------nom du nœud : prix valeur du nœud : 29,99 ---- -------- ------------nom du nœud : valeur du nœud booknode : XQuery Kick Start James McGovern 2003 49,99 nom du nœud valeur du nœud de catégorie web------------------------nom du nœud : valeur du nœud de titre : XQuery Kick StartNom du nœud valeur du nœud langnode en---------- ---------------nom du nœud : valeur du nœud d'auteur : James McGovern------------------------------nœud nom : année valeur du nœud : 2003--------------------------------nom du nœud : prix valeur du nœud : 49,99 ----- ----------- --------nom du nœud : valeur du nœud booknode : apprentissage de XML Erik T. Ray 2003 39,95 nom du nœud catégorie valeur du nœud nom du nœud Web covernode value paperback--------------node name: titlenode value: Learning XMLnode name langnode value fr---------- - ------------nom du nœud : valeur du nœud d'auteur : Erik T. Ray------------------------------nom du nœud : année valeur du nœud : 2003--------------nom du nœud : prix valeur du nœud : 39,95-------------- - ----------
Questions sur les nœuds :
<bookcategory="cooking"> <title lang="fr">Italien de tous les jours</title> <auteur>Giada De Laurentiis</auteur> <année>2005</année> <prix>30,00</prix> </ livre>
Pour les applications de livres : doc.getChildNodes() obtient une NodeList dont la longueur est de 9
Les 9 nœuds sont les suivants :
nœud de titre
nœud de langue
Nœud quotidien
nœud d'auteur
Nœud Giada De Laurentiis
noeud de l'année
Nœud 2005
nœud de prix
30h00 nœud