01-DOM解析XML

自己动手编写了一个person.xml文件,下面简单的说一下怎么用DOM解析该XML文件。

person.xml文件的 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<People>
   <person id="1">
      <name>Bob</name>
      <age>22</age>
      <gender>male</gender>
   </person>
   
   <person id="2">
      <name>John</name>
      <age>23</age>
      <gender>female</gender>
   </person>
   
   <person id="3">
      <name>张三</name>
      <age>12</age>
      <gender>男</gender>
   </person>
</People>

新建一个java工程项目,这里命名为DOMXml项目,新建一个包名为com.xbb.domxml,在包下新建一个java文件,XmlParseByDom.java,然后将person.xml文件copy到项目目录下,项目结构如下图示:

PersonParseByDom.java的内容如下:

package com.xbb.domxml;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class PersonParseByDom {

	public static void main(String[] args) {
		
		//DocumentBuilderFactory和DocumentBuilder都是一个抽象类
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db ;
		//Document是一个接口
		Document doc;
		try {
			db = dbf.newDocumentBuilder();
			//绑定解析person.xml文件
			doc = db.parse("person.xml");
			//获取person.xml文件中的所有<person>节点,返回类型为NodeList节点集合,这是一个接口,里面封装了两个方法,
			//一个是方法是public Node item(int index);返回指定位置的节点;另一个方法是public int getLength();返回节点结合包含                         //节点数。
			NodeList personList = doc.getElementsByTagName("person");
			//打印出person节点数
			System.out.println("共有" + personList.getLength() + "个person点");
			//遍历每个person节点
			for (int i = 0; i < personList.getLength(); i++) {
				//获取第i个person节点
				Node person = personList.item(i);
				System.out.println("-------------------");
				//打印person节点的id属性
				System.out.println("第"+i+"个person的属性"+person.getAttributes().item(0));
				//获取person节点的子节点集合,此处注意空格也属于一个子节点,类型为Node.TEXT_NODE;而我们需要的是Node.ELEMENT_                                //NODE类型的子节点				
				NodeList personChilds = person.getChildNodes();
				System.out.println("共有"+personChilds.getLength()+"个子元素");
				for (int j = 0; j < personChilds.getLength(); j++) {
					if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
						//打印每个子节点名字和值
						System.out.println(personChilds.item(j).getNodeName()+":"+personChilds.item(j).getFirstChild().getNodeValue());
					}
					
				}
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
	}
}

代码注释已经解释的比较详细。

最后输出结果为:

介绍就到这里了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值