XML解析之DOM解析技术案例

Java代码:

package com.xushouwei.xml;

 

import java.io.File;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

 

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

 

/**

 * DOM解析XML数据

 * 原理:

 * DOM解析(Document Object Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成一个与XML文档内容相应的对象模型,当解析完成时候,内存中会生成与XML文档结构对应的DOM树象树,这样便能够根据树的结构,以节点形式来对文档进行操作。

 * @author徐守威

 *

 */

public classDomDemo {

 

   public static void main(String[] args) {

      //创建解析XML文档对象,其保存在E盘的根目录下的article.xml

      FilexmlFile=newFile("E:\\article.xml");

      //声明一个DocumentBuilder对象,抽象类不能直接构建,可以通过DocumengBuilderFactory来构建,DocumentBuilder就是留创建Document用的啦

      DocumentBuilderbuilder=null;

      //声明一个DocumentBuilderFactory对象,抽象类,通过单例模式创建,DocumentBuilderFactory可以生产DocumentBuilder对象,就可以根据需求去解析已有xml文件(parse)或者创建新的document文件(newDocument)

      DocumentBuilderFactorybuilderFactory=DocumentBuilderFactory.newInstance();

      try {

         //从工厂中创建DocumentBuilder对象

         builder=builderFactory.newDocumentBuilder();

         //创建Document对象使用DocumentBuilder解析xml文件,这在里我们已经在内存中形成一个文档对象模型,接下来我们就要对文档模型进行一一解析

         Documentdocument=builder.parse(xmlFile);

         //首先我们要获取根元素,这里我们使用Element对象作为元素对象

         Elementroot= document.getDocumentElement();

         //打印根元素名称

         System.out.println("根元素名称root"+root.getNodeName());

         //获取根元素下面的子节点,返回成节点集合数组对象

         NodeListchildNodes=root.getChildNodes();

         //遍历子节点并对每个子节点进行判断

         for(int i=0;i<childNodes.getLength();i++)

         {

            //从节点集合数组对象中获取每个节点,并返回真正的节点对象

            Nodenode=childNodes.item(i);

            //对每个子节点记性判断

            if("article".equals(node.getNodeName()))

            {

                //如果节点名称为article,则输出article元素属性category

                System.out.println("\r\n找到一篇文章,所属分类:"+node.getAttributes().getNamedItem("category").getNodeValue()+".");

                //获取article节点下的子节点,并返回节点集合数组对象

                NodeListnodeDetail=node.getChildNodes();

                //循环遍历article节点下面的子节点

                for(intj=0;j<nodeDetail.getLength();j++)

                {

                   //从子节点集合数组对象中获取具体节点,并返回节点对象

                   Nodedetail=nodeDetail.item(j);

                   //获取article元素下的每个子节点

                   if("title".equals(detail.getNodeName()))

                   {

                      //输出tile

                      System.out.println("标题:"+detail.getTextContent());

                   }

                   elseif("author".equals(detail.getNodeName()))

                   {

                      //输出author

                      System.out.println("作者:"+detail.getTextContent());

                   }

                   elseif("email".equals(detail.getNodeName()))

                   {

                      //输出email

                      System.out.println("邮件:"+detail.getTextContent());

                   }

                   elseif("date".equals(detail.getNodeName()))

                   {

                      //输出author

                      System.out.println("日期:"+detail.getTextContent());

                   }

                }

            }

         }

        

      }catch(Exception e) {

         // TODO: handle exception

         e.printStackTrace();

      }

   }

  

}

XML代码:

 <?xml version="1.0" encoding="GB2312"?>
<articles>
<article category="Android">
<title>Android学习之路</title>
<author>徐守威</author>
<email>shouweixu@foxmail.com</email>
<date>2016-05-20</date>
</article>
<article category="JavaWeb">
<title>JavaWeb学习笔记</title>
<author>Jasxu</author>
<email>shouweixu@qq.com</email>
<date>2016-05-21</date>
</article>
</articles>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值