Maison >développement back-end >Tutoriel XML/RSS >XML : DOM4J pour l'analyse XML

XML : DOM4J pour l'analyse XML

黄舟
黄舟original
2017-02-24 15:14:511521parcourir


Pourquoi y a-t-il Dom4j en premier lieu ?

Parce que DOM consomme trop de mémoire et que SAX ne peut lire que XML, mais ne peut pas ajouter, supprimer, etc. C'est ainsi qu'est apparu Dom4j, qui est plus efficace et peut également effectuer des opérations grossières.

1. Introduction à DOM4J

  • Dom4j est une bibliothèque open source simple et flexible. Dom4j a été séparé des premiers développeurs de JDOM puis développé indépendamment. Contrairement à JDOM, dom4j utilise des interfaces et des classes de base abstraites. Bien que l'API de Dom4j soit relativement complexe, elle offre une meilleure flexibilité que JDOM.

  • Dom4j est une très excellente API Java XML avec d'excellentes performances, des fonctions puissantes et extrêmement simple à utiliser. De nombreux logiciels utilisent désormais Dom4j, comme Hibernate, y compris le JAXP de Sun, qui utilise également Dom4j.

  • Pour développer avec Dom4j, vous devez télécharger le fichier jar correspondant de dom4j et l'importer dans le projet. Adresse de téléchargement dom4j download

Cas 2.DOM4J

Toujours en utilisant notre précédent fichier XML :

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <学生 地址="香港">
        <名字>周小星</名字>
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>
    <学生 地址="澳门">
        <名字>林晓</名字>
        <年龄>25</年龄>
        <介绍>是一个好学生</介绍>
    </学生></班级>

La Documentation est placé dans le package com.dom4j.test.

Utiliser DOM4J nécessite également d'obtenir l'objet Document représentant l'intégralité du document, mais cet objet Document est dans le package org.dom4j.

Obtenez l'objet Document dans la méthode principale comme suit :

// 1.得到一个解析器SAXReader saxReader = new SAXReader();
// 2.指定解析哪个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));

Ensuite, nous pouvons écrire la méthode correspondante en fonction des besoins et l'appeler dans la méthode principale.

【1】Spécifier pour lire un élément (lire les informations du premier élève)

public static void read(Document document) {    // 得到根元素
    Element root = document.getRootElement();    // root.elements("学生"):表示取出root下的所有学生元素
    // root.element("学生"):表示取出root下的第一个学生元素
    Element student = root.element("学生");    // 取出属性
    String address = student.attributeValue("地址");    // 取出各个子节点的值
    String name = student.element("名字").getText();
    String age = student.element("年龄").getText();
    String intro = student.element("介绍").getText();

    System.out.println(address);
    System.out.println(name);
    System.out.println(age);
    System.out.println(intro);
}

【2】Ajouter un élément : Ajouter un informations sur l'élève dans le document XML

public static void add(Document document) throws Exception {    // 首先我们来创建一个学生节点对象
    Element student = DocumentHelper.createElement("学生");
    Element name = DocumentHelper.createElement("名字");
    name.setText("小强");
    Element age = DocumentHelper.createElement("年龄");
    age.setText("22");
    Element intro = DocumentHelper.createElement("介绍");
    intro.setText("是一个三好学生");    // 把三个子元素加到student节点下
    student.add(name);
    student.add(age);
    student.add(intro);    // 为学生添加属性
    student.addAttribute("地址", "大理");    // 将学生节点添加到根节点下
    document.getRootElement().add(student);    // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
    OutputFormat output = OutputFormat.createPrettyPrint();    // 设置输出的编码为utf-8
    output.setEncoding("utf-8");    // 这里一定要用FileOutputStream字节流输出,不能用FileWriter,否则还会有乱码
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output);
    xmlWriter.write(document);
    xmlWriter.close();
}

Pour ajouter un élève au document XML, vous devez également écrire l'objet Document en mémoire dans le fichier correspondant à la fin, sinon toutes les opérations sont juste Il est effectué en mémoire et ne sera pas sorti dans un fichier similaire au DOM.
Nous pouvons toujours écrire ce code mis à jour comme une méthode distincte, comme suit :

public static void update(Document document) throws Exception {    // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
    OutputFormat output = OutputFormat.createPrettyPrint();    // 设置输出的编码为utf-8
    output.setEncoding("utf-8");
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output);
    xmlWriter.write(document);
    xmlWriter.close();
}

[3] Ajouter un élément à la position spécifiée

public static void addByIndex(Document document) throws Exception {    // 创建一个元素
    Element newStu = DocumentHelper.createElement("学生");
    newStu.setText("王小明");    // 得到所有学生的list
    List allStudent = document.getRootElement().elements("学生");
    allStudent.add(1, newStu);
    update(document);
}

Ici, vous pouvez l'ajouter directement au List obtenu puis le mettre à jour. Le List voici le java.utilList


dans le package [4] Supprimer un élément ou supprimer les attributs de cet élément
Supprimer un élément et DOM De même, le nœud est supprimé via le nœud parent correspondant. Par exemple, nous voulons supprimer le premier nœud étudiant :

public static void delete(Document document) throws Exception {    // 找到该元素
    Element student = document.getRootElement().element("学生");    // 删除元素的某个属性
    student.remove(student.attribute("地址"));    // 通过父节点删除节点
    student.getParent().remove(student);
    update(document);
}

[5] Mettre à jour l'élément
Par exemple, nous voulons ajouter 1 à l'âge de tous les étudiants, et Changer l'attribut d'adresse de tous les étudiants aux États-Unis :

public static void updateAgeAndAddress(Document document) throws Exception {
Element root = document.getRootElement();
    List<Element> list = root.elements();    for (Element element : list) {        // 更新属性
        element.addAttribute("地址", "美国");        // 更新年龄子节点的值
        Element e_age = element.element("年龄");        int age = Integer.parseInt(e_age.getTextTrim());
        e_age.setText(String.valueOf(age + 1));
    }
    update(document);
}

Pourquoi y a-t-il Dom4j en premier lieu ?

Parce que DOM consomme trop de mémoire et que SAX ne peut lire que XML, mais ne peut pas ajouter, supprimer, etc. C'est ainsi qu'est apparu Dom4j, qui est plus efficace et peut également effectuer des opérations grossières.

1. Introduction à DOM4J

  • Dom4j est une bibliothèque open source simple et flexible. Dom4j a été séparé des premiers développeurs de JDOM puis développé indépendamment. Contrairement à JDOM, dom4j utilise des interfaces et des classes de base abstraites. Bien que l'API de Dom4j soit relativement complexe, elle offre une meilleure flexibilité que JDOM.

  • Dom4j est une très excellente API Java XML avec d'excellentes performances, des fonctions puissantes et extrêmement simple à utiliser. De nombreux logiciels utilisent désormais Dom4j, comme Hibernate, y compris le JAXP de Sun, qui utilise également Dom4j.

  • Pour développer avec Dom4j, vous devez télécharger le fichier jar correspondant de dom4j et l'importer dans le projet. Adresse de téléchargement dom4j download

Cas 2.DOM4J

Toujours en utilisant notre précédent fichier XML :

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <学生 地址="香港">
        <名字>周小星</名字>
        <年龄>23</年龄>
        <介绍>学习刻苦</介绍>
    </学生>
    <学生 地址="澳门">
        <名字>林晓</名字>
        <年龄>25</年龄>
        <介绍>是一个好学生</介绍>
    </学生></班级>

La Documentation est placé dans le package com.dom4j.test.

Utiliser DOM4J nécessite également d'obtenir l'objet Document représentant l'intégralité du document, mais cet objet Document est dans le package org.dom4j.

Obtenez l'objet Document dans la méthode principale comme suit :

// 1.得到一个解析器SAXReader saxReader = new SAXReader();
// 2.指定解析哪个XML文件Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));

Ensuite, nous pouvons écrire la méthode correspondante en fonction des besoins et l'appeler dans la méthode principale.

【1】Spécifier pour lire un élément (lire les informations du premier élève)

public static void read(Document document) {    // 得到根元素
    Element root = document.getRootElement();    // root.elements("学生"):表示取出root下的所有学生元素
    // root.element("学生"):表示取出root下的第一个学生元素
    Element student = root.element("学生");    // 取出属性
    String address = student.attributeValue("地址");    // 取出各个子节点的值
    String name = student.element("名字").getText();
    String age = student.element("年龄").getText();
    String intro = student.element("介绍").getText();

    System.out.println(address);
    System.out.println(name);
    System.out.println(age);
    System.out.println(intro);
}

【2】Ajouter un élément : Ajouter un informations sur l'élève dans le document XML

public static void add(Document document) throws Exception {    // 首先我们来创建一个学生节点对象
    Element student = DocumentHelper.createElement("学生");
    Element name = DocumentHelper.createElement("名字");
    name.setText("小强");
    Element age = DocumentHelper.createElement("年龄");
    age.setText("22");
    Element intro = DocumentHelper.createElement("介绍");
    intro.setText("是一个三好学生");    // 把三个子元素加到student节点下
    student.add(name);
    student.add(age);
    student.add(intro);    // 为学生添加属性
    student.addAttribute("地址", "大理");    // 将学生节点添加到根节点下
    document.getRootElement().add(student);    // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
    OutputFormat output = OutputFormat.createPrettyPrint();    // 设置输出的编码为utf-8
    output.setEncoding("utf-8");    // 这里一定要用FileOutputStream字节流输出,不能用FileWriter,否则还会有乱码
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output);
    xmlWriter.write(document);
    xmlWriter.close();
}

Pour ajouter un élève au document XML, vous devez également écrire l'objet Document en mémoire dans le fichier correspondant à la fin, sinon toutes les opérations sont juste Il est effectué en mémoire et ne sera pas sorti dans un fichier similaire au DOM.
Nous pouvons toujours écrire ce code mis à jour comme une méthode distincte, comme suit :

public static void update(Document document) throws Exception {    // 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
    OutputFormat output = OutputFormat.createPrettyPrint();    // 设置输出的编码为utf-8
    output.setEncoding("utf-8");
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"), output);
    xmlWriter.write(document);
    xmlWriter.close();
}

[3] Ajouter un élément à la position spécifiée

public static void addByIndex(Document document) throws Exception {    // 创建一个元素
    Element newStu = DocumentHelper.createElement("学生");
    newStu.setText("王小明");    // 得到所有学生的list
    List allStudent = document.getRootElement().elements("学生");
    allStudent.add(1, newStu);
    update(document);
}

Ici, vous pouvez l'ajouter directement au List obtenu puis le mettre à jour. Le List voici le java.utilList


dans le package [4] Supprimer un élément ou supprimer les attributs de cet élément
Supprimer un élément et DOM De même, le nœud est supprimé via le nœud parent correspondant. Par exemple, nous voulons supprimer le premier nœud étudiant :

public static void delete(Document document) throws Exception {    // 找到该元素
    Element student = document.getRootElement().element("学生");    // 删除元素的某个属性
    student.remove(student.attribute("地址"));    // 通过父节点删除节点
    student.getParent().remove(student);
    update(document);
}

[5] Mettre à jour l'élément
Par exemple, nous voulons ajouter 1 à l'âge de tous les étudiants et modifiez l'attribut d'adresse de tous les étudiants en États-Unis :

public static void updateAgeAndAddress(Document document) throws Exception {
Element root = document.getRootElement();
    List<Element> list = root.elements();    for (Element element : list) {        // 更新属性
        element.addAttribute("地址", "美国");        // 更新年龄子节点的值
        Element e_age = element.element("年龄");        int age = Integer.parseInt(e_age.getTextTrim());
        e_age.setText(String.valueOf(age + 1));
    }
    update(document);
}

 以上就是XML—XML解析之DOM4J的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Cas d'analyse XML-DOMArticle suivant:Cas d'analyse XML-DOM