您的位置:首页 > 其它

用dom解析如下xml文件内容

2016-06-30 18:31 465 查看
用dom解析如下xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<root>
<users>
<user name="刘德华" age="25" >
成都春熙路
</user>
<user name="周杰伦" age="20" >
成都盐市口
</user>
<user name="林志玲" age="17" >
成都布鲁明顿
</user>
</users>
</root>
解析之后把所有年龄大于18的人的信息存储在List<User>对象中,

User类:有三个成员变量(String name,int age String addr)

并遍历输出list里所有人的名字。

dom解析的步骤
  
 1)得到dom解析器DocumentBuilder
a)得到dom解析器工厂
  DocumentBuilderFactory fac= DocumentBuilderFactory.newInstance()
   b)通过工厂得到解析器
          DocumentBuilder builder=  fac.newDocumentBuilder()
  
 
2)通过dom解析器解析xml数据--->得到document对象(封装了xml的数据)
a)xml数据来源于文件
 Document parse(File f) 

  b)xml数据来源于输入流

    Document parse(InputStream is)

 3)通过document对象取出xml的数据
       a)通过document对象得到根标签
     Element getDocumentElement() 

  b)通过标签Element对象-找子标签

  1)找所有子标签

  NodeList getChildNodes()

  2)找指定名字的子标签

  NodeList getElementsByTagName(String name) 

 

  NodeList->装很多节点的容器

  a)容器节点个数getLength() 
b)访问某个位置的节点item(int index) 
Node:可能是(属性,文本,注释,标记)
-》我们需要使用的标记-》判断并强转为标记Element

c)取出标记Element里对应属性名的值
String getAttribute(String name) 

  d)取出标记文本内容

  getTextContent

package xml;

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.NodeList;

public class Test3 {
public static void main(String[] args)throws Exception {
dome1();
}
private static void dome1()throws Exception {
//1)得到dom解析器工厂fac
DocumentBuilderFactory fac= DocumentBuilderFactory.newInstance();
//2)通过解析器工厂fac得到dom解析器
DocumentBuilder builder= fac.newDocumentBuilder();
//3)通过dom解析器解析xml--》得到document对象(树)
Document doc= builder.parse(new File("src/xml/test3.xml"));
//4)通过doc(树)对象找需要的数据
//a)通过doc找到根标签root
Element root= doc.getDocumentElement();
//b)通过root找users
Element users= (Element) root.getElementsByTagName("users").item(0);
//c)通过users找到所有的user
NodeList listUser= users.getElementsByTagName("user");
//d)遍历所有user
//创建list
List<User> list=new ArrayList<User>();
for (int i = 0; i < listUser.getLength(); i++) {
//当前的user
Element user= (Element) listUser.item(i);
//取出年龄>18者处理数据
short age= Short.parseShort(user.getAttribute("age"));
if(age>18){
//名字
String name=user.getAttribute("name");
//地址
String addr= user.getTextContent().trim();
list.add(new User(name, age, addr));
}
}
//遍历list取出所有名字
for (User user : list) {
System.out.println(user.name);
}
}
}
class User{
String name;
int age;
String addr;
public User(String name, int age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: