dom4j解析xml(demo)

转载自:

https://www.cnblogs.com/sharpest/p/7877501.html

https://www.cnblogs.com/hongwz/p/5514786.html

感谢!

2.1、Document对象相关

1、读取XML文件,获得document对象.

       SAXReader reader = new SAXReader();  
      Document   document = reader.read(new File("input.xml"));      

2、解析XML形式的文本,得到document对象.

             String text = "<members></members>";      
             Document document = DocumentHelper.parseText(text);      

3、主动创建document对象.

             Document document = DocumentHelper.createDocument();      
             Element root = document.addElement("members");// 创建根节点  

2.2、节点相关

1、获取文档的根节点.

Element rootElm = document.getRootElement();      

2、取得某节点的单个子节点.

Element memberElm=root.element("member");// "member"是节点名      

3.取得节点的文字

String text=memberElm.getText();     
String text=root.elementText("name");这个是取得根节点下的name字节点的文字.       

4.取得某节点下指定名称的所有节点并进行遍历.

List nodes = rootElm.elements("member");      
for (Iterator it = nodes.iterator(); it.hasNext();) {      
    Element elm = (Element) it.next();      
   // do something      
}          

5.对某节点下的所有子节点进行遍历.

for(Iterator it=root.elementIterator();it.hasNext();){      
                 Element element = (Element) it.next();      
                // do something      
             }          

6.在某节点下添加子节点.

Element ageElm = newMemberElm.addElement("age");      

7.设置节点文字.

ageElm.setText("29");      

8.删除某节点.

parentElm.remove(childElm);    // childElm是待删除的节点,parentElm是其父节点      

9.添加一个CDATA节点.

         Element contentElm = infoElm.addElement("content");      
         contentElm.addCDATA(diary.getContent());      

2.3、属性相关.

1.取得节点的指定的属性

             Element root=document.getRootElement();          
             Attribute attribute=root.attribute("size");    // 属性名name      

2.取得属性的文字

    String text=attribute.getText();    
String text2=root.element("name").attributeValue("firstname");
//这个是取得根节点下name字节点的firstname属性的值.      

3.遍历某节点的所有属性

Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}

4.设置某节点的属性和文字.

newMemberElm.addAttribute("name", "sitinspring");    

5.设置属性的文字

             Attribute attribute=root.attribute("name");      
             attribute.setText("sitinspring");      

6.删除某属性

             Attribute attribute=root.attribute("size");// 属性名name      
             root.remove(attribute); 

直接上代码

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
    <student number="0001">
        <name>tom</name>
        <age>18</age>
        <qqs>
            <qq id="1">777777</qq>
            <qq id="2">888888</qq>
        </qqs>
    </student>
    <student number="0002">
        <name >jack</name>
        <age>18</age>
        <qqs>
            <qq id="1">123456</qq>
            <qq id="2">121212</qq>
        </qqs>
    </student>
</students>
package com.xml;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.InputStream;
import java.util.List;

/**
 * @author wangben
 * @Title: Xml01
 * @Package: com.xml
 * @ProjectName javase-code
 * @Description: TODO
 * @date 2019-01-26 10:48 星期六
 */
public class Xml01 {
    public static void main(String[] args) throws Exception {
        //1.创建解析器对象SAXReader
        SAXReader reader = new SAXReader();
        //2.读取XML文件,获得document对象
        File file = new File(Xml01.class.getClassLoader()
                .getResource("bean.xml").getPath());
        Document document = reader.read(file);
        Element root = document.getRootElement();//3.获得根元素
        List<Element> childElements = root.elements();//4.获得所有
        //已知属性子元素
        yes(childElements);
        System.out.println("-----------------------------------");
        //未知属性子元素
        no(childElements);
    }

    //已知
    public static void yes(List<Element> childElements){
        for (Element child : childElements) {
            //已知属性名情况下
            System.out.println("number: " + child.attributeValue("number"));
            //已知子元素名的情况下
            System.out.println("name:" + child.elementText("name"));
            System.out.println("age:" + child.elementText("age"));
            List<Element> qqs = child.elements("qqs");
            for (Element qq:qqs) {
                System.out.println("qq:"+qq.elementText("qq"));
            }
            //这行是为了格式化美观而存在
            System.out.println();
        }
    }
    //未知元素属性时
    public static void no(List<Element> childElements){
        for (Element child : childElements) {
            //未知属性名情况下
            List<Attribute> attributeList = child.attributes();
            for (Attribute attr : attributeList) {
                System.out.println(attr.getName() + ": " + attr.getValue());
            }
            //未知子元素名情况下
            List<Element> elementList = child.elements();
            for (Element ele : elementList) {
                System.out.println(ele.getName() + ": " + ele.getText());
                //孙子节点
                List<Element> list1 = ele.elements();
                //判断是否存在
                if (list1!=null && list1.size()!=0 ) {
                    for (Element list : list1) {
                        System.out.println(list.getName() + ": " + list.getText());
                        //孙孙节点..不做讨论有机会再看
                    }
                }
            }
            System.out.println();
        }
    }

}


转载请注明: Hexo dom4j解析xml(demo)

上一篇
汇总 汇总
###1.java基础 JAVA 的基本数据类型有哪些 ? String 是不是基本数据类型 ? | 数据类型 | 关键字 | 内存占用 | 取值范围 || :————–: | :—-: | :–: | :–: ||
2019-01-26
下一篇
代理模式 代理模式
###代理模式是什么 ####1. 静态代理 静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 ####2. 动态代理 ####
2019-01-11