Publicité
Souhaitez-vous apprendre à lire et à écrire un fichier XML à partir de Java ?
fichiers XML Qu'est-ce qu'un fichier XML et comment l'ouvrir et l'utiliser ?Vous avez peut-être vu le terme « XML ». Vous pourriez même avoir accidentellement ouvert un fichier XML. Qu'est-ce que XML et comment l'utilisez-vous ? Lire la suite sont utilisés à diverses fins, y compris le stockage de données. Avant que JSON ne devienne populaire, XML était le format préféré pour représenter, stocker et transporter des données structurées. Même si la popularité de XML a diminué ces dernières années, vous pouvez le rencontrer occasionnellement, il est donc important d'apprendre à travailler avec du code.
Java Standard Edition (SE) 10 concepts Java de base que vous devriez apprendre pour commencerQue vous écriviez une interface graphique, développiez un logiciel côté serveur ou une application mobile utilisant Android, l'apprentissage de Java vous sera très utile. Voici quelques concepts Java de base pour vous aider à démarrer. Lire la suite
comprend le API Java pour le traitement XML (JAXP), qui est un terme générique couvrant la plupart des aspects du traitement XML. Ceux-ci inclus:- DOM : Le modèle d'objet de document comprend des classes pour travailler avec des artefacts XML tels que des éléments, des nœuds, des attributs, etc. L'API DOM charge le document XML complet en mémoire pour le traitement, elle n'est donc pas très adaptée pour travailler avec de gros fichiers XML.
- SAXO: L'API simple pour XML est un algorithme événementiel pour la lecture de XML. Ici, XML est traité en déclenchant des événements trouvés lors de la lecture de XML. Les besoins en mémoire pour utiliser cette méthode sont faibles, mais travailler avec l'API est plus complexe que de travailler avec le DOM.
- StAX : L'API Streaming pour XML est un ajout récent aux API XML et fournit un filtrage, un traitement et une modification de flux hautes performances de XML. Bien qu'il évite de charger l'intégralité du document XML en mémoire, il fournit une architecture de type pull plutôt qu'une architecture événementielle, donc l'application est plus facile à coder et à comprendre que d'utiliser le SAX API.
Dans cet article, nous utilisons le API DOM pour montrer comment lire et écrire des fichiers XML à partir de java. Nous couvrirons les deux autres API dans de futurs articles.
Un exemple de fichier XML
Pour les besoins de cet article, nous démontrons les concepts en utilisant l'exemple XML suivant, qui peut être trouvé ici:
1.0?>Gambardella, Matthieu Guide du développeur XML
Ordinateur 44.95 2000-10-01 Un examen approfondi de la création d'applications avec XML. Rallie, Kim ...
Lire un fichier XML
Examinons les étapes de base requises pour lire un fichier XML à l'aide de l'API DOM.
La première étape consiste à obtenir une instance de Générateur de documents. Le générateur est utilisé pour analyser les documents XML. Pour une utilisation basique, nous procédons comme ceci :
Usine DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware (faux); factory.setValidating (faux); Générateur DocumentBuilder = factory.newDocumentBuilder();
Nous pouvons maintenant charger l'ensemble du document en mémoire à partir de l'élément racine XML. Dans notre exemple, c'est le catalogue élément.
Fichier fichier =...; // Fichier XML à lire. Document document = builder.parse (fichier); Catalogue d'éléments = document.getDocumentElement();
Et c'est tout, les gars! L'API DOM pour lire un XML est vraiment simple. Vous avez maintenant accès à l'ensemble du document XML à partir de son élément racine, catalogue. Voyons maintenant comment travailler avec.
Utilisation de l'API DOM
Maintenant que nous avons la racine XML Élément, nous pouvons utiliser l'API DOM pour extraire des pépites d'informations intéressantes.
Obtenez tous les livre enfants de l'élément racine et boucle sur eux. Noter que getChildNodes() Retour tous enfants, y compris le texte, les commentaires, etc. Pour notre propos, nous n'avons besoin que des éléments enfants, nous ignorons donc les autres.
NodeList livres = catalog.getChildNodes(); for (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Node. ELEMENT_NODE ) continuer; Élément livre = (Élément) enfant; // travailler avec le livre Element ici. }
Comment trouvez-vous un élément enfant spécifique, étant donné le parent? La méthode statique suivante renvoie le premier élément correspondant s'il est trouvé, ou null. Comme vous pouvez le voir, la procédure consiste à obtenir la liste des nœuds enfants et à les parcourir en boucle pour sélectionner les nœuds d'élément portant le nom spécifié.
Nœud privé statique findFirstNamedElement (Nœud parent, String tagName) { NodeList children = parent.getChildNodes(); for (int i = 0, in = children.getLength(); je < dans; i++) { Node child = children.item (i); if ( child.getNodeType() != Node. ELEMENT_NODE ) continuer; if ( child.getNodeName().equals (tagName) ) return child; } renvoie null; }
Notez que l'API DOM traite le contenu textuel d'un élément comme un nœud distinct de type TEXT_NODE. De plus, le contenu du texte peut être divisé en plusieurs nœuds de texte adjacents. Ainsi, le traitement spécial suivant est requis pour récupérer le contenu du texte dans un élément.
chaîne privée statique getCharacterData (nœud parent) { StringBuilder text = new StringBuilder(); if ( parent == null ) return text.toString(); NodeList children = parent.getChildNodes(); for (int k = 0, kn = children.getLength(); k < kn; k++) { Node child = children.item (k); if ( child.getNodeType() != Node. TEXT_NODE ) pause; text.append (child.getNodeValue()); } return text.toString(); }
Armés de ces fonctions pratiques, examinons maintenant du code pour répertorier certaines informations de notre exemple XML. Nous aimerions afficher des informations détaillées pour chaque livre, telles qu'elles seraient disponibles dans un catalogue de livres.
NodeList livres = catalog.getChildNodes(); for (int i = 0, ii = 0, n = books.getLength(); i < n; i++) { Node child = books.item (i); if ( child.getNodeType() != Node. ELEMENT_NODE ) continuer; Élément livre = (Élément) enfant; ii++; ID de chaîne = book.getAttribute("id"); String author = getCharacterData (findFirstNamedElement (child,"author")); String title = getCharacterData (findFirstNamedElement (child,"title")); String genre = getCharacterData (findFirstNamedElement (enfant,"genre")); String price = getCharacterData (findFirstNamedElement (child,"price")); Chaîne pubdate = getCharacterData (findFirstNamedElement (child,"pubdate")); String descr = getCharacterData (findFirstNamedElement (enfant,"description")); System.out.printf("%3d. id du livre = %s\n" + " auteur: %s\n" + " titre: %s\n" + " genre: %s\n" + " prix: %s\n" + " date de publication: %s \n" + " descr: %s\n", ii, id, author, title, genre, price, pubdate, descr); }
Écrire une sortie XML
Java fournit le API de transformation XML pour transformer des données XML. Nous utilisons cette API avec le transformation d'identité pour générer une sortie.
A titre d'exemple, ajoutons un nouveau livre élément au catalogue d'exemples présenté ci-dessus. Les détails du livre (comme auteur, Titre, etc.) peut être obtenu en externe, peut-être à partir d'un fichier de propriétés ou d'une base de données. Nous utilisons le fichier de propriétés suivant pour charger les données.
id=bk113. auteur=Jane Austen. title=Orgueil et préjugés. genre=Romance. prix=6.99. publier_date=2010-04-01. description="C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme." Ainsi commence la fierté et Préjugés, la comédie de bonnes manières pleine d'esprit de Jane Austen - l'un des romans les plus populaires de tous les temps - qui présente des combats magnifiquement civilisés entre le fier M. Darcy et la préjugée Elizabeth Bennet alors qu'ils jouent leur cour fougueuse dans une série de salons du XVIIIe siècle intrigues.
La première étape consiste à analyser le fichier XML existant à l'aide de la méthode présentée ci-dessus. Le code est également affiché ci-dessous.
Fichier fichier =...; // Fichier XML à lire. Document document = builder.parse (fichier); Catalogue d'éléments = document.getDocumentElement();
Nous chargeons les données du fichier de propriétés en utilisant le Propriétés classe fournie avec java. Le code est assez simple et montré ci-dessous.
Chaîne propsFile =...; Propriétés props = new Properties(); try (FileReader in = new FileReader (propsFile)) { props.load (in); }
Une fois les propriétés chargées, nous récupérons les valeurs que nous voulons ajouter à partir du fichier de propriétés.
ID de chaîne = props.getProperty("id"); Chaîne author = props.getProperty("author"); String title = props.getProperty("title"); String genre = props.getProperty("genre"); String price = props.getProperty("price"); String publier_date = props.getProperty("publish_date"); Chaîne descr = props.getProperty("description");
Créons maintenant un vide livre élément.
Élément book = document.createElement("book"); book.setAttribute("id", id);
Ajout des éléments enfants au livre est trivial. Pour plus de commodité, nous collectons les noms d'éléments requis dans un Lister et ajoutez les valeurs dans une boucle.
Listerelnames =Arrays.asList("author", "title", "genre", "price", "publish_date", "description"); for (String elname: elnames) { Element el = document.createElement (elname); Text text = document.createTextNode (props.getProperty (elname)); el.appendChild (texte); book.appendChild (el); } catalog.appendChild (livre);
Et c'est comme ça qu'on fait. Les catalogue élément a maintenant le nouveau livre élément ajouté. Il ne reste plus qu'à écrire le XML mis à jour.
Pour écrire le XML, nous avons besoin d'une instance de Transformateur qui est créé comme indiqué ci-dessous. Notez que nous demandons l'indentation du XML de sortie en utilisant le setOutputProperty() méthode.
TransformerFactory tfact = TransformerFactory.newInstance(); Transformateur tform = tfact.newTransformer(); tform.setOutputProperty (OutputKeys. INDENT, "oui"); tform.setOutputProperty("{ http://xml.apache.org/xslt}indent-amount", "3");
La dernière étape de la génération de la sortie XML consiste à appliquer la transformation. Le résultat apparaît sur le flux de sortie, Système.out.
tform.transform (nouveau DOMSource (document), nouveau StreamResult (System.out));
Pour écrire la sortie directement dans un fichier, utilisez ce qui suit.
tform.transform (nouveau DOMSource (document), nouveau StreamResult (nouveau fichier ("output.xml")));
Et cela conclut cet article sur la lecture et l'écriture de fichiers XML à l'aide de l'API DOM.
Avez-vous utilisé l'API DOM dans vos applications? Comment a-t-il fonctionné? Veuillez nous en informer dans les commentaires ci-dessous.