用dom解析如下xml文件内容

用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;
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值