使用dom4j解析XML文档

来源:互联网 发布:虚拟化和云计算的关系 编辑:程序博客网 时间:2024/05/18 02:55

              dom4j是一个易用的、开源的库,可以实现对xml文档的解析,使用起来非常方便。

现在有这样一个简单的xml文档:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE students [<!ELEMENT students (student*)><!ELEMENT student (id,name,age)><!ELEMENT id (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ATTLIST student sex (男|女) "男">]><students><student sex="男"><id>1</id><name>张三</name><age>20</age></student><student sex="女"><id>2</id><name>陈吉吉</name><age>20</age></student><student sex="男"><id>3</id><name>李四</name><age>19</age></student></students>

下面使用java代码来进行解析:

package com.wzj.test;import java.io.File;import java.io.IOException;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class TestMain {/** * @param args * @throws IOException  */public static void main(String[] args){try {//1.获取项目的根路径File directory=new File("");String path=directory.getCanonicalPath();//2.读取xml文件,获取Document对象SAXReader reader=new SAXReader();Document document=reader.read(new File(path+"/src/Student.xml"));//3.获取根节点——即studentsElement root=document.getRootElement();//4.获取根节点下的所有名为student的子节点集合List<Element> student=root.elements("student");//5.遍历每个student元素(对象)for (Element item : student) {System.out.println("------------------");//6.获取节点下的属性(student的sex属性)Attribute sex=item.attribute("sex");//7.获取属性值(sex的属性值)System.out.println("学生性别:"+sex.getText());//或者直接这样,里面有很多方法,可以自己查看练习//System.out.println("学生姓名:"+item.attributeValue("sex"));//8.获取节点下的子节点元素(student下的单个节点元素——id)Element id=item.element("id");//9.获取节点元素的文字(id节点的文本)System.out.println("学生编号:"+id.getText());//或者直接这样//System.out.println(item.elementText("id"));//10.添加子节点(在student节点下再添加一个address节点)Element address=item.addElement("address");//11.设置节点文字address.setText("地址"+id.getText());//12.设置节点属性和属性值address.addAttribute("city", "北京");//13.删除某节点//item.remove(address);System.out.println("学生姓名:"+item.elementText("name"));System.out.println("学生年龄:"+item.elementText("age"));System.out.println("------------------");}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

遍历元素时也可以这样遍历:

for(Iterator it=student.iterator();it.hasNext();){Element e=(Element)it.next();//...}
遍历某节点下的所有属性:

for(Iterator it=root.attributeIterator();it.hasNext();){Attribute a=(Attribute)it.next();}



0 0