用Dom4j读取xml文件,在xml文件夹下有test2.xml文件:
<?xml version="1.0" encoding="gb2312"?> <students name="zizhu" age="21"> <student age="25"> <name>崔卫兵</name> <college>PC学院</college> </student> <student> <name>cwb</name> <college leader="学院领导">PC学院</college> </student> <student age="45"> <name>xxxxx</name> <college leader="">xxx学院</college> <element name="测试"> <next>下一个</next> <subElement>hello,done!!!</subElement> </element> </student> </students>
源码:
package com.test; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class JdomTest2 { public static void main(String[] args) { SAXReader reader=new SAXReader(); try { //总结一:此处得到文档的位置:任何一个读文件的方式必定会提供一个拥有InputStream输入流的操作方式,可以说这种方式是万能的 //ClassLoader默认的是当前项目的classpath路径,即bin目录 Document document=reader.read(JdomTest2.class.getClassLoader().getResourceAsStream("xml/test2.xml")); Element root=document.getRootElement();//得到根节点 tree(root);//遍历 } catch (DocumentException e) { e.printStackTrace(); } } //遍历 public static void tree(Element element){ /** * 形如这种方式:<element> * <name>zizhu</name> * <age>21</age> * <address>上海</address> * </element>,其中所有的都能用elementIterator这种方式遍历出来,取的时候用getName和getText来取 */ System.out.println("节点的名字:"+element.getName()+"\t节点的值:"+element.getText()); //遍历节点的所有属性 //总结二:得到元素所有的属性,attributeIterator //形如这种方式<element name="hello" age=21 address="上海">...</>,其中所有的属性都能用这种方式遍历出来 Iterator rootAttriIter=element.attributeIterator(); while(rootAttriIter.hasNext()){ Attribute rootAttribute=(Attribute)rootAttriIter.next(); //形如这种方式<element name="hello" age=21 address="上海">...</>,通过getName取到属性的名字,通过getValue取到值 System.out.print("节点的属性的名字和值:"+rootAttribute.getName()+"="+rootAttribute.getValue()+"\t"); } System.out.println(); //遍历节点的所有子节点 Iterator subElementIter=element.elementIterator(); while(subElementIter.hasNext()){ Element subElement=(Element)subElementIter.next(); tree(subElement); } } }
输出结果:
节点的名字:students 节点的值:
节点的属性的名字和值:name=zizhu 节点的属性的名字和值:age=21
节点的名字:student 节点的值:
节点的属性的名字和值:age=25
节点的名字:name 节点的值:崔卫兵
节点的名字:college 节点的值:PC学院
节点的名字:student 节点的值:
节点的名字:name 节点的值:cwb
节点的名字:college 节点的值:PC学院
节点的属性的名字和值:leader=学院领导
节点的名字:student 节点的值:
节点的属性的名字和值:age=45
节点的名字:name 节点的值:xxxxx
节点的名字:college 节点的值:xxx学院
节点的属性的名字和值:leader=
节点的名字:element 节点的值:
节点的属性的名字和值:name=测试
节点的名字:next 节点的值:下一个
节点的名字:subElement 节点的值:hello,done!!!