旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

XML—XML剖析之DOM4J【XML教程】,XML,DOM4J

作者:搜教程发布时间:2019-12-01分类:XML教程浏览:66评论:0


导读:起首为何会有Dom4j呢?由于DOM太耗内存,而SAX只能对XML举行读取,而不能去增加、删除等。所以涌现了Dom4j,它的效力更高,同时也能够举行crud操纵。...


起首为何会有Dom4j呢?

由于DOM太耗内存,而SAX只能对XML举行读取,而不能去增加、删除等。所以涌现了Dom4j,它的效力更高,同时也能够举行crud操纵。

1.DOM4J引见

  • Dom4j是一个简朴、天真地开放源代码的库。Dom4j是由初期开辟JDOM的人分离出来然后自力开辟的。与JDOM差别的是,dom4j运用接口和笼统基类,虽然Dom4j的API相对要庞杂一些,但它供应了比JDOM更好的天真性。

  • Dom4j是一个异常优秀的Java XML API,具有机能优秀、功能强大和极易运用的特性。如今许多软件采纳的Dom4j,比方Hibernate,包含Sun公司本身的JAXP也用了Dom4j。

  • 运用Dom4j开辟,需下载dom4j响应的jar文件,并导入到项目。下载地点dom4j下载

2.DOM4J案例

依旧运用我们之前的XML文件:

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <门生 地点="香港">
        <名字>周小星</名字>
        <岁数>23</岁数>
        <引见>进修受苦</引见>
    </门生>
    <门生 地点="澳门">
        <名字>林晓</名字>
        <岁数>25</岁数>
        <引见>是一个好门生</引见>
    </门生></班级>

该文档放在com.dom4j.test包中。

运用DOM4J也要猎取代表全部文档Document对象,不过这个Document对象是org.dom4j包中的。

在主要领中猎取Document对象以下:

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

然后我们就能够依据需求来写响应的要领,在主要领中挪用。

【1】指定读取某个元素(读取第一个门生的信息)

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】增加元素:增加一个门生信息到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();
}

增加门生到XML文档中,也需要在末了将内存中的Document对象写入响应的文件,不然一切的操纵只是在内存中举行,并不会输出到文件中,这与DOM相似。
我们依旧能够将这段更新的代码零丁写成一个要领,以下:

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】增加一个元素到指定位置

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

这里实际上是直接在获得的List中增加,然后更新即可。这里的List就是java.util包中的List

【4】删除一个元素或许删除这个元素的属性
删除一个元素与DOM相似,都是经由过程响应的父节点删除该节点。比方说我们要删除第一个门生节点:

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

【5】更新元素
比方我们要把一切门生的岁数加1,而且将一切门生的地点属性改成美国:

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

起首为何会有Dom4j呢?

由于DOM太耗内存,而SAX只能对XML举行读取,而不能去增加、删除等。所以涌现了Dom4j,它的效力更高,同时也能够举行crud操纵。

1.DOM4J引见

  • Dom4j是一个简朴、天真地开放源代码的库。Dom4j是由初期开辟JDOM的人分离出来然后自力开辟的。与JDOM差别的是,dom4j运用接口和笼统基类,虽然Dom4j的API相对要庞杂一些,但它供应了比JDOM更好的天真性。

  • Dom4j是一个异常优秀的Java XML API,具有机能优秀、功能强大和极易运用的特性。如今许多软件采纳的Dom4j,比方Hibernate,包含Sun公司本身的JAXP也用了Dom4j。

  • 运用Dom4j开辟,需下载dom4j响应的jar文件,并导入到项目。下载地点dom4j下载

2.DOM4J案例

依旧运用我们之前的XML文件:

<?xml version="1.0" encoding="utf-8" standalone="no"?><班级>
    <门生 地点="香港">
        <名字>周小星</名字>
        <岁数>23</岁数>
        <引见>进修受苦</引见>
    </门生>
    <门生 地点="澳门">
        <名字>林晓</名字>
        <岁数>25</岁数>
        <引见>是一个好门生</引见>
    </门生></班级>

该文档放在com.dom4j.test包中。

运用DOM4J也要猎取代表全部文档Document对象,不过这个Document对象是org.dom4j包中的。

在主要领中猎取Document对象以下:

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

然后我们就能够依据需求来写响应的要领,在主要领中挪用。

【1】指定读取某个元素(读取第一个门生的信息)

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】增加元素:增加一个门生信息到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();
}

增加门生到XML文档中,也需要在末了将内存中的Document对象写入响应的文件,不然一切的操纵只是在内存中举行,并不会输出到文件中,这与DOM相似。
我们依旧能够将这段更新的代码零丁写成一个要领,以下:

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】增加一个元素到指定位置

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

这里实际上是直接在获得的List中增加,然后更新即可。这里的List就是java.util包中的List

【4】删除一个元素或许删除这个元素的属性
删除一个元素与DOM相似,都是经由过程响应的父节点删除该节点。比方说我们要删除第一个门生节点:

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

【5】更新元素
比方我们要把一切门生的岁数加1,而且将一切门生的地点属性改成美国:

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的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:XMLDOM4J


欢迎 发表评论: