Heim  >  Artikel  >  Backend-Entwicklung  >  XML – DOM4J für XML-Parsing

XML – DOM4J für XML-Parsing

黄舟
黄舟Original
2017-02-24 15:14:511474Durchsuche


Warum gibt es Dom4j überhaupt?

Da DOM zu viel Speicher verbraucht und SAX nur XML lesen, aber nicht hinzufügen, löschen usw. kann. So erschien Dom4j, das effizienter ist und auch Rohoperationen durchführen kann.

1. Einführung in DOM4J

  • Dom4j ist eine einfache und flexible Open-Source-Bibliothek. Dom4j wurde von den frühen Entwicklern von JDOM abgespalten und dann unabhängig entwickelt. Im Gegensatz zu JDOM verwendet dom4j Schnittstellen und abstrakte Basisklassen. Obwohl die API von Dom4j relativ komplex ist, bietet sie eine größere Flexibilität als JDOM.

  • Dom4j ist eine hervorragende Java-XML-API mit hervorragender Leistung, leistungsstarken Funktionen und äußerst einfacher Bedienung. Viele Softwareprogramme verwenden mittlerweile Dom4j, beispielsweise Hibernate, einschließlich Suns eigenem JAXP, das ebenfalls Dom4j verwendet.

  • Um mit Dom4j zu entwickeln, müssen Sie die entsprechende JAR-Datei von dom4j herunterladen und in das Projekt importieren. Adresse herunterladen dom4j herunterladen

2.DOM4J-Fall

Wir verwenden immer noch unsere vorherige XML-Datei:

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

Die Dokumentation wird im Paket com.dom4j.test abgelegt.

Die Verwendung von DOM4J erfordert außerdem den Erhalt des Document-Objekts, das das gesamte Dokument darstellt, aber dieses Document-Objekt befindet sich im org.dom4j-Paket.

Rufen Sie das Document-Objekt in der Hauptmethode wie folgt ab:

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

Anschließend können wir die entsprechende Methode entsprechend den Anforderungen schreiben und in der Hauptmethode aufrufen.

【1】Geben Sie an, dass ein Element gelesen werden soll (lesen Sie die Informationen des ersten Schülers)

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】Element hinzufügen: Fügen Sie ein hinzu Studenteninformationen zum XML-Dokument

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();
}

Um einen Studenten zum XML-Dokument hinzuzufügen, müssen Sie am Ende auch das Dokumentobjekt im Speicher in die entsprechende Datei schreiben, andernfalls sind alle Vorgänge erledigt einfach Es wird im Speicher ausgeführt und nicht in eine Datei ausgegeben, die DOM ähnelt.
Wir können diesen aktualisierten Code weiterhin als separate Methode schreiben, wie folgt:

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] Fügen Sie ein Element an der angegebenen Position hinzu

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);
}

Hier können Sie es direkt zum erhaltenen List hinzufügen und dann aktualisieren. Das List hier ist das java.utilList


im -Paket [4] Ein Element löschen oder die Attribute dieses Elements löschen
Ein Element löschen und DOM In ähnlicher Weise wird der Knoten über den entsprechenden übergeordneten Knoten gelöscht. Beispielsweise möchten wir den ersten Studentenknoten löschen:

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

[5] Element aktualisieren
Zum Beispiel möchten wir 1 zum Alter von hinzufügen Alle Studenten und Ändern Sie das Adressattribut aller Studenten in die Vereinigten Staaten:

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);
}

Warum gibt es Dom4j überhaupt?

Weil DOM zu viel Speicher verbraucht und SAX nur XML lesen, aber nicht hinzufügen, löschen usw. kann. So erschien Dom4j, das effizienter ist und auch Rohoperationen durchführen kann.

1. Einführung in DOM4J

  • Dom4j ist eine einfache und flexible Open-Source-Bibliothek. Dom4j wurde von den frühen Entwicklern von JDOM abgespalten und dann unabhängig entwickelt. Im Gegensatz zu JDOM verwendet dom4j Schnittstellen und abstrakte Basisklassen. Obwohl die API von Dom4j relativ komplex ist, bietet sie eine größere Flexibilität als JDOM.

  • Dom4j ist eine hervorragende Java-XML-API mit hervorragender Leistung, leistungsstarken Funktionen und äußerst einfacher Bedienung. Viele Softwareprogramme verwenden mittlerweile Dom4j, beispielsweise Hibernate, einschließlich Suns eigenem JAXP, das ebenfalls Dom4j verwendet.

  • Um mit Dom4j zu entwickeln, müssen Sie die entsprechende JAR-Datei von dom4j herunterladen und in das Projekt importieren. Adresse herunterladen dom4j herunterladen

2.DOM4J-Fall

Wir verwenden immer noch unsere vorherige XML-Datei:

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

Die Dokumentation wird im Paket com.dom4j.test abgelegt.

Die Verwendung von DOM4J erfordert außerdem den Erhalt des Document-Objekts, das das gesamte Dokument darstellt, aber dieses Document-Objekt befindet sich im org.dom4j-Paket.

Rufen Sie das Document-Objekt in der Hauptmethode wie folgt ab:

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

Anschließend können wir die entsprechende Methode entsprechend den Anforderungen schreiben und in der Hauptmethode aufrufen.

【1】Geben Sie an, dass ein Element gelesen werden soll (lesen Sie die Informationen des ersten Schülers)

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】Element hinzufügen: Fügen Sie ein hinzu Studenteninformationen zum XML-Dokument

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();
}

Um einen Studenten zum XML-Dokument hinzuzufügen, müssen Sie am Ende auch das Dokumentobjekt im Speicher in die entsprechende Datei schreiben, andernfalls sind alle Vorgänge erledigt einfach Es wird im Speicher ausgeführt und nicht in eine Datei ausgegeben, die DOM ähnelt.
Wir können diesen aktualisierten Code weiterhin als separate Methode schreiben, wie folgt:

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] Fügen Sie ein Element an der angegebenen Position hinzu

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);
}

Hier können Sie es direkt zum erhaltenen List hinzufügen und dann aktualisieren. Das List hier ist das java.utilList


im -Paket [4] Ein Element löschen oder die Attribute dieses Elements löschen
Ein Element löschen und DOM In ähnlicher Weise wird der Knoten über den entsprechenden übergeordneten Knoten gelöscht. Beispielsweise möchten wir den ersten Studentenknoten löschen:

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

[5] Element aktualisieren
Zum Beispiel möchten wir 1 zum Alter von hinzufügen alle Studenten, und ändern Sie das Adressattribut aller Studenten in Vereinigte Staaten:

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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:XML-DOM-Parsing-FallNächster Artikel:XML-DOM-Parsing-Fall