java dom 读取xml文件_DOM解析XML文件(读取)

DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式。

一般分为以下几步:

1.定义好目标XML文件路径path。

2.实例化DOM解析工厂对象,DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(),这种工厂类都不能用new的方式直接产生对象,必须用调用类的newInstance方法来产生对象。

3.用上面的工厂对象生成DOM解析器对象,DocumentBuilder builder = factory.newDocumentBuilder()。

4.用解析器对象对目标XML文件进行解析,得到Document文件对象,Document doc = builder.parse(path)。

5.处理Document文件,获得XML文件的所有信息。得到上面的doc对象也就相当于得到了树的根节点,就可以逐步对这可dom树进行遍历获得所有的节点信息,由于树的定义就是递归定义的,所以这里的遍历采用递归的思想最为简单。

代码如下:

首先是目标XML文件

class="xml"><?xml version="1.0" encoding="utf-8"?>

张三丰

武当

小龙女

古墓

?然后是解析的代码:

?

public class Domparse {

//用来保存解析出来的学生对象的动态链表

static ArrayList list = new ArrayList();

static Student stu;

public static void main(String[] args) throws Exception {

String path = "D:\\xmlEX\\student2.xml";

//实例化一个用来产生DOM解析器的工厂对象

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//使用工厂得到一个DOM解析器对象

DocumentBuilder builder = factory.newDocumentBuilder();

//解析指定的xml文件或者数据流买得到DOM对象

Document doc = builder.parse(path);

//通过DOM对象获得其中的数据,递归进行遍历

parseXML(doc);

for(Student s:list){

System.out.println(s);

}

}

/**

* 递归解析XML文件

* @param doc

*/

public static void parseXML(Node doc){

//获得doc的所有子节点

NodeList nodes = doc.getChildNodes();

//遍历所有子节点

for(int i=0;i

Node node1 = nodes.item(i);

//获得节点的名字

String str = node1.getNodeName();

//如果这个节点是一个元素节点

if(node1 instanceof Element){

//如果节点名字为stu则创建一个student对象存入队列,并且获得它的num属性

if(str.equals("stu")){

stu = new Student();

list.add(stu);

//获得该元素节点的num属性

String num = ((Element)node1).getAttribute("num");

stu.num = Integer.parseInt(num);

}else if(str.equals("name")){

stu.name = node1.getTextContent();

}else if(str.equals("sex")){

stu.sex = node1.getTextContent();

}else if(str.equals("cla")){

stu.cla = node1.getTextContent();

}

}

parseXML(node1);

}

}

}

?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值