首页 > 代码库 > JavaEE XML DOM4J解析

JavaEE XML DOM4J解析

DOM4J解析

@author ixenos

 

 

 

DOM4J常用API


 

SAXReader reader = new SAXReader();

//Document对象也看成根节点

Document doc = reader.read(File file);

 

//迭代当前节点下的子节点/也可foreach

Iterator itr = doc.nodeIterator();

While(itr.hasNext()){ Node node = itr.next(); }

 

//得到根节点

Element  rootElem = doc.getRootElement();

 

//得到当前标签下指定名称的第一个子标签

Element contactElem = rootElem.element("contact");

 

//得到当前标签下的的所有子标签

List<Element> list = rootElem.elements();

 

//获取更深层次的标签(方法只能一层层地获取),XPath!!!当然这只获得第一个

Element nameElem = doc.getRootElement().element("contact").element("name");

 

//得到指定名称的属性值

String idValue = http://www.mamicode.com/contactElem.attributeValue("id");

 

//得到指定属性名称的属性对象

Attribute idAttr = contactElem.attribute("id");

 

//得到所有属性对象,返回LIst集合

List<Attribute> list = contactElem.attributes();

 

//得到所有属性对象,返回迭代器

Iterator<Attribute> it = contactElem.attributeIterator();

while(it.hasNext()){ Attribute attr = it.next(); }

 

//得到当前标签夹着的的Text内容,注意空格和换行也是Text

String content = doc.getRootElement().getText();

 

//获取文本(先获取标签,再获取标签上的文本)

Element nameELem =doc.getRootElement().element("contact").element("name");

//然后得到文本

String text = nameELem.getText();

System.out.println(text);

//直接得到指定子标签名的文本内容,直接得到phone标签的Text

String text2 = doc.getRootElement().element("contact").elementText("phone");

 

 

1、最基本的:Document对象指代整个XML文件

// 读取XML文档,返回Document对象

SAXReader reader = new SAXReader();

// 读取xml文档,返回Document对象

Document doc = reader.read(new File("03.contact.xml"));

 

2、Document对象的nodeIterator方法迭代下一级,判断是否是Element对象,下一级再用nodeIterator迭代下一级,双重循环,或者用递归,就能遍历所有标签节点

// nodeiterator:得到当前标签节点下的所有子节点对象

Iterator<Node> it = doc.nodeIterator();

while (it.hasNext()) {

   Node node = it.next();

   String name = node.getName();

   System.out.println(name);

 

   // 继续取出下面的子节点

   // 只有标签节点才有子节点

   // 所以判断当前标签是否标签节点

   if (node instanceof Element) {

      Element elem = (Element) node;

      Iterator<Node> it2 = elem.nodeIterator();

      while (it2.hasNext()) {

      Node node2 = it2.next();

     

System.out.println(node2.getName());

      }

   }

}

 

 

DOM4J完整读取XML内容示例


 

 1 import java.io.File;
 2 import java.util.Iterator;
 3 import java.util.List;
 4 
 5 import org.dom4j.Attribute;
 6 import org.dom4j.Document;
 7 import org.dom4j.Element;
 8 import org.dom4j.Node;
 9 import org.dom4j.Text;
10 import org.dom4j.io.SAXReader;
11 import org.junit.Test;
12 /**
13  * 练习-完整读取xml文档内容
14  * @author APPle
15  *
16  */
17 public class Demo3 {
18 
19     @Test
20     public void test() throws Exception{
21         //读取xml文档
22         SAXReader reader = new SAXReader();
23         Document doc =
24                 reader.read(new File("./src/contact.xml"));
25 
26         //读取根标签
27         Element rootELem = doc.getRootElement();
28 
29         StringBuffer sb = new StringBuffer();
30 
31         getChildNodes(rootELem,sb);
32 
33         System.out.println(sb.toString());
34 
35     }
36 
37     /**
38      * 获取当前标签的所有子标签
39      */
40     private void getChildNodes(Element elem,StringBuffer sb){
41         //System.out.println(elem.getName());
42 
43         //开始标签
44         sb.append("<"+elem.getName());
45 
46         //得到标签的属性列表
47         //为什么属性的组装放在循环体外呢?因为此时循环体是获得element根节点的子节点,所以不能组装根标签的属性,只能留待下面的递归配合迭代来曲线救国
48         List<Attribute> attrs = elem.attributes();
49         if(attrs!=null){
50             for (Attribute attr : attrs) {
51                 //System.out.println(attr.getName()+"="+attr.getValue());
52                 //属性值双引号使用转义字符
53                 sb.append(" "+attr.getName()+"=\""+attr.getValue()+"\"");
54             }
55         }
56         sb.append(">");
57 
58         //得到文本
59         //String content = elem.getText();
60         //System.out.println(content);
61         Iterator<Node> it = elem.nodeIterator();
62         while(it.hasNext()){
63             Node node = it.next();
64 
65             //标签
66             if(node instanceof Element){
67                 Element el = (Element)node;
68                 getChildNodes(el,sb);
69             }
70 
71             //文本
72             if(node instanceof Text){
73                 Text text = (Text)node;
74                 sb.append(text.getText());
75             }
76         }
77 
78         //结束标签
79         sb.append("</"+elem.getName()+">");
80 
81 
82 
83 
84     }
85 }

 

JavaEE XML DOM4J解析