DOM是文档对象模型解析,构建文档的分层语法结构,
在内存中建立DOM树,DOM树的节点以对象的形式来标识,
文档解析文成以后,文档的整个DOM树都会放在内存中。
DOM的优点:
1. 当文档的某一部分被多次的访问时,非常方便。
2. 需要对文档进行调整或者一次性的访问整个文档。
3. DOM可以随时的访问文档中的某个部分。
4. 可以避免一些无效的操作。
首先编写一个student.xml文件,再对这个xml文件进行解析
<?xml version="1.0" encoding="UTF-8"?> <students> <student stuId="001"> <stuName>公主</stuName> <stuAge>19</stuAge> </student> <student stuId="002"> <stuName>王子</stuName> <stuAge>20</stuAge> </student> <student stuId="003"> <stuName>灰姑娘</stuName> <stuAge>19</stuAge> </student> </students>接下来首先将这个student类进行一个封装
public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return "id:"+id+",name:"+name+";age:"+age; } }
再利用dom开始解析
<pre name="code" class="java" style="font-size: 14px; line-height: 26px;">代码中方法可以参考jdk-api:下载地址http://download.csdn.net/download/zhangvalue/9203511
<pre name="code" class="java">import java.io.File; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) throws Exception{ Student stu = null; List<Student> list = new ArrayList<Student>(); //--1、获得Dom对象的解析器工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //--2、从工厂中获得Dom对象的解析器 DocumentBuilder buidler = factory.newDocumentBuilder(); //--3、解析器解析哪个文档--》文档的Dom对象 Document dom = buidler.parse(new File("Students.xml")); //--4、访问文件根节点 Element node = dom.getDocumentElement(); //--5、获得根节点下的所有子节点 NodeList nodeList = node.getChildNodes(); //--6、遍历集合中的所有节点 for(int i=0;i<nodeList.getLength();i++){ //--子节点 Node c_node = nodeList.item(i); if("student".equals(c_node.getNodeName())){ stu = new Student(); //--获得节点的所有属性 NamedNodeMap map = c_node.getAttributes(); //--获得相对应的属性值 Node sxNode = map.getNamedItem("stuId"); String stuId = sxNode.getNodeValue(); stu.setId(Integer.parseInt(stuId)); //--查询子节点下的所有子节点 NodeList nList = c_node.getChildNodes(); for(int j=0;j<nList.getLength();j++){ Node c_c_node = nList.item(j); String bq = c_c_node.getNodeName(); String wbnr = c_c_node.getTextContent(); if("stuName".equals(bq)){ stu.setName(wbnr); } if("stuAge".equals(bq)){ stu.setAge(Integer.parseInt(wbnr)); } } list.add(stu); } } for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } }
xml有两种解析方式这个是dom解析,还有sax解析方式已经写了可以去我的博客中的找找
本次的代码可以下载具体代码可以下载链接:http://download.csdn.net/download/zhangvalue/9204199