您的位置:首页 > 编程语言 > Java开发

java Domj4读取xml文件

2016-05-26 20:54 381 查看
先概括,再以代码形式给出。

获取节点:

Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点

获取 标签:

Element Document.getRootElement(); //获取xml文档的根标签

Element ELement.element("标签名") //指定名称的第一个子标签

Iterator<Element>Element.elementIterator("标签名");// 指定名称的所有子标签

List<Element> Element.elements(); //获取所有子标签

获取属性:

String Element.attributeValue("属性名") //获取指定名称的属性值

Attribute Element.attribute("属性名");//获取指定名称的属性对象

Attribute.getName() //获取属性名称

Attibute.getValue() //获取属性值

List<Attribute> Element.attributes(); //获取所有属性对象.推荐使用方案。

Iterator<Attribute> Element.attibuteIterator(); //获取所有属性对象

获取文本:

Element.getText(); //获取当前标签的文本

Element.elementText("标签名")//获取当前标签的指定名称的子标签的文本内容

案例:

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

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

/**
* 第二个dom4j读取xml文件内容
* 节点
* 标签
* 属性
* 文本
* @author APPle
*
*/
public class Demo2 {

/**
* 得到节点信息
*/
@Test
public void test1() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));

//2.nodeIterator: 得到当前节点下的所有子节点对象(【不包含孙以下的节点】)
Iterator<Node> it = doc.nodeIterator();//返回的是一个迭代器对象,迭代器里面存放的就是Node,给出泛型为Node
while(it.hasNext()){//判断是否有下一个元素
Node node = it.next();//取出元素
String name = node.getName();//得到节点名称
//System.out.println(name);

//System.out.println(node.getClass());
//继续取出其下面的子节点
//只有【标签节点】才有子节点
//判断当前节点是否是标签节点
if(node instanceof Element){
Element elem = (Element)node;//node是Node类型的,因此要向下转型
Iterator<Node> it2 = elem.nodeIterator();
while(it2.hasNext()){
Node n2 = it2.next();
System.out.println(n2.getName());
}
}
}
}

/**
* 遍历xml文档的所有节点
* @throws Exception
*/
@Test
public void test2() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));

//得到根标签。contactList
Element rooElem = doc.getRootElement();

getChildNodes(rooElem);

}

/**
* 获取 传入的标签下的所有子节点。Element elem只有Element标签才有子节点
* @param elem
*/
private void getChildNodes(Element elem){
System.out.println(elem.getName());//获取到了根标签的名称

//得到子节点
Iterator<Node> it = elem.nodeIterator();
while(it.hasNext()){
Node node = it.next();

//1.判断是否是标签节点
if(node instanceof Element){
Element el = (Element)node;
//递归
getChildNodes(el);
}
};
}

/**
* 获取标签
*/
@Test
public void test3() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));

//2.得到根标签
Element  rootElem = doc.getRootElement();
//得到标签名称
String name = rootElem.getName();
System.out.println(name);//contactList

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

/*Element contactElem = rootElem.element("contact");
System.out.println(contactElem.getName());*/

//4.得到当前标签下指定名称的所有子标签,指定了contact名称,就得到这个名称的所有同名的标签
//这里制定了名称,有局限性
/*Iterator<Element> it = rootElem.elementIterator("contact");
while(it.hasNext()){
Element elem = it.next();
System.out.println(elem.getName());
}*/

//5.得到当前rootElem标签下的的所有子标签对象,这里会拿出所有子标签对象。推荐使用。
List<Element> list = rootElem.elements();
//遍历List的方法
//1)传统for循环  2)增强for循环 3)迭代器
/*for(int i=0;i<list.size();i++){
Element e = list.get(i);
System.out.println(e.getName());
}*/

for(Element e:list){
System.out.println(e.getName());
}
/*
Iterator<Element> it = list.iterator(); //ctrl+2 松开 l
while(it.hasNext()){
Element elem = it.next();
System.out.println(elem.getName());
}*/

//获取更深层次的标签(方法只能一层层地获取)
Element nameElem = doc.getRootElement().
element("contact").element("name");
System.out.println(nameElem.getName());

}

/**
* 获取属性
*/
@Test
public void test4() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));

//获取属性:(先获得属性所在的标签对象,然后才能获取属性)
//1.得到标签对象
Element contactElem = doc.getRootElement().element("contact");
//2.得到属性
//2.1  得到指定名称的属性值
/*
String idValue = contactElem.attributeValue("id");
System.out.println(idValue);
*/

//2.2 得到指定属性名称的属性对象Attribute
/*Attribute idAttr = contactElem.attribute("id");
//getName: 属性名称    getValue:属性值
System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/

//2.3 得到【所有】属性对象,返回LIst集合。不需要知道属性名称和多少个属性
/*List<Attribute> list = contactElem.attributes();//推荐使用方案
//遍历属性
for (Attribute attr : list) {
System.out.println(attr.getName()+"="+attr.getValue());
}*/

//2.4 得到【所有属性】对象,返回迭代器
Iterator<Attribute> it = contactElem.attributeIterator();
while(it.hasNext()){
Attribute attr = it.next();
System.out.println(attr.getName()+"="+attr.getValue());
}

}

/**
* 获取文本
*/
@Test
public void test5() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();

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

/**
* 注意: 空格和换行也是xml的内容
*/
String content = doc.getRootElement().getText();
System.out.println(content);

//获取文本(先获取标签对象,再获取标签上的文本)
Element nameELem =
doc.getRootElement().element("contact").element("name");
//1. 得到文本
String text = nameELem.getText();
System.out.println(text);

//2. 得到指定子标签名的文本内容
String text2 =
doc.getRootElement().element("contact").elementText("phone");
System.out.println(text2);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: