books.XML文件:

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
    <book id="1">
        <name>冰与火之歌</name>
        <author>乔治马丁</author>
        <price>88.0</price>
        <year>2014</year>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <price>77.0</price>
        <language>English</language>
    </book>
</bookstore>

把这个文档放在项目的根路径下,与src目录平行,就可以使用相对路径来引用了。

Java代码部分:

public class DOMTest {
    public static void main(String[] args) {

   // step 1:获得DOM解析器工厂

   // 工厂的作用是创建具体的解析器,即创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        try {
            // step 2:获得具体的dom解析器   创建一个DocumentBuilder对象
            DocumentBuilder db=dbf.newDocumentBuilder();
            // step 3:解析一个xml文档,通过Document对象的parse方法加载books.xml文件到当前目录下
            Document document=db.parse("books.xml");
            //获取所有book节点的集合
            NodeList booklist= document.getElementsByTagName("book");
            //遍历每一个book节点
           //  通过getLength()获取NodeList的长度
            for(int i=0;i<booklist.getLength();i++){
                System.out.println("下面开始遍历第"+(i+1)+"本书");
            //    节点有多个属性时:
                //通过item(i)获取bookList的节点值,NodeList索引值从0开始
                Node book=booklist.item(i);
                //获取book的所有属性
                NamedNodeMap attrs= book.getAttributes();
                for(int j=0;j<attrs.getLength();j++){
                    //通过item(index)方法获取book节点的某一个属性
                    Node attr=attrs.item(j);
                    //获取属性名
                    System.out.println("属性名:"+attr.getNodeName());
                    //获取属性值
                    System.out.println("属性值:"+attr.getNodeValue());
                }
                //当知道节点只有一个id属性时:
                /*Element attr= (Element) booklist.item(i);
                String attributeValue=attr.getAttribute("id");
                System.out.println("id属性的属性值为:"+attributeValue);*/
                
                //下面解析book节点的子节点
                NodeList childNodes = book.getChildNodes();
                System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");
                //获取每个节点的节点名和节点值
                for(int k=0;k<childNodes.getLength();k++){
                    //区分出text类型的node及element类型的node
                    if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){
                        //获取了element类型的节点的节点名
                        System.out.print("第"+(k+1)+"个子节点的节点名称是:"+childNodes.item(k).getNodeName());
                        //两者之间的区别是Element类型的节点值为空
                        System.out.println("------"+childNodes.item(k).getFirstChild().getNodeValue());
                  //   System.out.println("------"+childNodes.item(k).getTextContent());
                    }
                }
            }
            System.out.println("===============循环结束==============");
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

具体过程参见注释。

首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象。 

我们在这里使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。

又因为所有的解析器都服从于JAXP所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。

  所以当在不同的解析器之间进行切换时,值需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。

当获得一个工厂对象之后,使用它的静态方法newDocumentBuilder(),可以获得一个DocumentBuilder对象

  这个对象代表了具体的DOM解析器。

  解析器的具体实现对于程序来说并不重要。  

  然后,我们就可以利用这个解析器对文档进行解析了。

  Sun公司提供了默认的工厂和默认的解析器,上面的例子中就使用了默认的解析器。

转载于:https://www.cnblogs.com/aa6055blog/p/4630140.html

DOM方式解析XML文件实例相关推荐

  1. JavaXml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  2. Android中使用SAX方式解析XML文件

    转载http://blog.csdn.net/cjjky/article/details/6666834 在Android中解析XML文主要有三种方式,分别为Simple API for XML(SA ...

  3. php xml expat,php 使用expat方式解析xml文件操作示例

    本文实例讲述了php 使用expat方式解析xml文件操作.分享给大家供大家参考,具体如下: test.xml: George John Reminder George2 John2 Reminder ...

  4. JavaXml教程(五)使用SAX方式解析XML文件

    Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载. javax.xml.parsers ...

  5. JavaXml教程(三)使用DOM方式修改XML文件内容

    DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...

  6. JavaXml教程(四)使用DOM方式生成XML文件

    在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件. 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为"Em ...

  7. Java DOM方式解析XML(模板)

    1 //创建一个DocumentBuilderFactory工厂实例 2 DocumentBuilderFactory DBF=DocumentBuilderFactory.newInstance() ...

  8. java解析xml文档_Java解析xml文件

    读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...

  9. java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解

    一 简介 在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM.SAX.JDOM.DOM4J这四种方式了.其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此 ...

最新文章

  1. SmartDoc(YUIDoc) 注释编写
  2. php 计算几分钟_几天前 _几月前 几年前,php计算几分钟前、几小时前、几天前的几个函数...
  3. 病毒导致分区双击无法打开的解决方法
  4. 关于Promise.all()的理解
  5. springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解
  6. 中国计算机学会CCF招聘-信息系统项目管理/技术支持
  7. python numpy安装失败_解决python3.x安装numpy成功但import出错的问题
  8. 失眠,很困但是睡不着怎么办?
  9. html推荐网站,20个经典bootsrtap后台html网站模板推荐
  10. 洛谷P2147[SDOI2008]洞穴勘测
  11. 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
  12. HBase Filter及对应Shell
  13. PHP令人困惑的strtotime
  14. 国内十大HR系统品牌
  15. 基于JAVA社团管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  16. PyTorch-LSTM时间序列预测中如何预测真正的未来值
  17. mysql错误代码1068_数据库1068错误
  18. “美登杯”上海市高校大学生程序设计邀请赛(华东理工大学) 小花梨的取石子游戏(博弈)
  19. K8S 快速入门(十二)实战篇:配置 ConfigMapSecret
  20. PDF 阅读与注释的实践——知之阅读、Markdown+Git、Kami、Edge、Mendeley、Zotero

热门文章

  1. 大学生必须要知道的毕业设计基本流程
  2. 前端—每天5道面试题(九)
  3. 实体与电商,有啥区别?
  4. 为什么人们认为区块链是大忽悠?
  5. 成年人的世界里,赚钱是保护自己和身边人最高效的手段
  6. 什么样的人不适合互联网创业
  7. 新媒体运营的“钱途”在哪里?
  8. 贫穷的本质,是我们用太多时间在看手机
  9. 小米靠着“便宜”在手机市场中占有一席之地
  10. 互联网公司大厂中厂小厂分别指哪些公司?