Java XML解析之DOM解析

DOM解析:基于XML文档树结构的解析。

解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作这个树结构。

特点:

随机访问XML文件,内容可修改

不适合大文档

得到XML文件有三种方式:

1:通过文件方式读取:

File file=new File("F:""employees.xml");

Document doc=builder.parse(file);

2:通过一个URL方式读取:

 URL u=new URL("http://java.sun.com/index.html")

Document doc=builder.parse(u);

3:可以能过java IO 流的读取:

       FileInputStream inputstream = new FileInputStream(

                  "F:""employees.xml");

    Document doc=builder.parse(inputstream);


编程步骤:

1.准备一个简单的xml文件-movies.xml,放入到Java项目中

<?xml version="1.0" encoding="UTF-8"?>
<Movies>
    <Movie id="1">
        <name>愤怒的小鸟</name>
        <type>animation</type>
        <year>2016</year>
    </Movie>
    <Movie id="2">
        <name>叶问</name>
        <type>action</type>
        <language>chinese</language>
    </Movie>
</Movies>

2.创建一个DocumentBuilderFactory对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

3.创建一个DocumentBuilder对象

DocumentBuilder db=dbf.newDocumentBuilder();

4.获取Document对象

Document document= db.parse("movies.xml");

5. 获得文档根元素下一级子元素所有元素

NodeList movies=document.getElementsByTagName("Movie");


6.拿到一个子元素

Node movie=movies.item(i);


7.拿到一个属性集合

NamedNodeMap attrs=movie.getAttributes();

8.拿到一个子元素的属性集合

NodeList childNoides=movie.getChildNodes();

9.完整代码:

public class Dom {

	public static void main(String[] args) {
		//1.创建一个DocumentBuilderFactory对象
		DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		//2.创建一个DocumentBuilder对象
		try {
			DocumentBuilder db=dbf.newDocumentBuilder();
			//3.获取Document对象
			Document document= db.parse("movies.xml");
			System.out.println("开始解析");
			//4.<span style="color: rgb(73, 73, 73); font-family: simsun; font-size: 14px; line-height: 21px;">获得文档根元素下一级子元素所有元素</span>
			NodeList movies=document.getElementsByTagName("Movie");
			System.out.println("共有"+movies.getLength()+"部电影");
			for(int i=0;i<movies.getLength();i++){
				System.out.println("--------------");
				System.out.println("正在解析第"+(i+1)+"部电影");
				//5.拿到一个子元素
				Node movie=movies.item(i);
				//6.拿到一个子元素的属性
				NamedNodeMap attrs=movie.getAttributes();
				for(int j=0;j<attrs.getLength();j++){
					Node attr=attrs.item(j);
					System.out.print("属性名:"+attr.getNodeName()+" ");
					System.out.println("属性值:"+attr.getNodeValue());
				}
				//7.拿到一个子元素的属性集合
				NodeList childNoides=movie.getChildNodes();
				for(int k=0;k<childNoides.getLength();k++){
					Node child=childNoides.item(k);
					if(child.getNodeType()==Document.ELEMENT_NODE){
					System.out.println("节点名"+child.getNodeName());
					//System.out.println("节点值"+child.getNodeValue());
					System.out.println("节点值:"+child.getFirstChild().getNodeValue());
					}
				}
				System.out.println("第"+(i+1)+"部电影解析结束");
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}

10.效果图:





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值