• 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徐守威

     *

     */

    publicclass DomDemo {

     

       publicstaticvoid main(String[] args) {

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

          File xmlFile=new File("E:\article.xml");

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

          DocumentBuilder builder=null;

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

          DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();

          try {

             //从工厂中创建DocumentBuilder对象

             builder=builderFactory.newDocumentBuilder();

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

             Document document=builder.parse(xmlFile);

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

             Element root= document.getDocumentElement();

             //打印根元素名称

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

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

             NodeList childNodes=root.getChildNodes();

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

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

             {

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

                Node node=childNodes.item(i);

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

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

                {

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

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

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

                    NodeList nodeDetail=node.getChildNodes();

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

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

                    {

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

                       Node detail=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>

  • 相关阅读:
    [转]initrd.img, vmlinux
    [转]关于arm 上kernel, qemu起VM等
    [转]overlayFS
    [转]virtiofs
    [转] dynamic DMA mapping
    [转] cpu亲和性
    [转] /dev/shm
    huginn,n8n,ifttt
    ipfs---protocol, filesystem,web p2p,cdn
    gpg,pgp--
  • 原文地址:https://www.cnblogs.com/Jasxu/p/xml_dom_parse.html
Copyright © 2020-2023  润新知