先概括,再以代码形式给出。
获取节点:
iterator element.nodeiterator(); //获取当前标签节点下的所有子节点
获取 标签:
element document.getrootelement(); //获取xml文档的根标签
element element.element(标签名) //指定名称的第一个子标签
iterator558dc77cf99fee6757323747f07fa144element.elementiterator(标签名);// 指定名称的所有子标签
list558dc77cf99fee6757323747f07fa144 element.elements(); //获取所有子标签
获取属性:
string element.attributevalue(属性名) //获取指定名称的属性值
attribute element.attribute(属性名);//获取指定名称的属性对象
attribute.getname() //获取属性名称
attibute.getvalue() //获取属性值
list50911cc176bc2bfcefb2e67861bd2b2f element.attributes(); //获取所有属性对象.推荐使用方案。
iterator50911cc176bc2bfcefb2e67861bd2b2f 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);
}
}
以上就是java domj4读取xml文件的内容。