01-DOM解析XML

来源:互联网 发布:云数据库的特点是什么 编辑:程序博客网 时间:2024/06/08 05:38

自己动手编写了一个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 blocke.printStackTrace();}}}

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

最后输出结果为:

介绍就到这里了。

0 0
原创粉丝点击