POPTEST老李分享DOM解析XML之java

 

Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple API for XML,XML简单API)。DOM可以将XML转换为树结构。

XML文档内容如下:

文件名:NameList.xml,文件路径:C:\Users\Tsybius\Desktop\NameList.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <list1>
    <person id="101" name="Tsybius" remark="1" />
    <person id="102" name="Galatea" remark="2" />
    <person id="103" name="Quintus" remark="3" />
    <person id="104" name="Atia" remark="4" />
    <person id="105" name="Justitia" remark="5" />
  </list1>
  <list2>
    <person id="201" name="Zhang" remark="a" />
    <person id="202" name="Wang" remark="b" />
    <person id="203" name="Li" remark="c" />
    <person id="204" name="Zhao" remark="d" />
    <person id="205" name="Liu" remark="e" />
  </list2>
  <text>TEXT</text>
</root>
Java代码如下:
package XmlDomTest;
 
import java.io.File;
import java.io.IOException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
 
/**
 * 使用DOM解析XML
 * @author Tsybius
 *
 */
public class XmlDomTest {
     
    /**
     * 使用DOM解析XML
     * @param args
     */
    public static void main(String[] args) {
 
        try {
             
            String filePath = "C:\\Users\\Tsybius\\Desktop\\NameList.xml";
            File f = new File(filePath);
 
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(f);
             
            //遍历节点方式1
            Element root = doc.getDocumentElement();
            System.out.println("根节点名:" + root.getNodeName());
            NodeList children = root.getChildNodes();
            for (int i = 0; i < children.getLength(); i++) {
                Node child = children.item(i);
                if (child instanceof Element) {
                    Element childElement = (Element)child;
                    System.out.println("节点名:" + childElement.getNodeName());
                     
                    if (childElement.getNodeName().equals("list1")) {
                        //list1
                        //遍历节点方式2
                        //获取指定属性
                        for (Node list1Node = childElement.getFirstChild(); 
                                list1Node != null;
                                list1Node = list1Node.getNextSibling()) {
                            if (list1Node instanceof Element) {
                                Element list1Element = (Element)list1Node;
                                System.out.print("person:");
                                System.out.print("id=" + list1Element.getAttribute("id") + ";");
                                System.out.print("name=" + list1Element.getAttribute("name") + ";");
                                System.out.print("remark=" + list1Element.getAttribute("remark") + ";");
                                System.out.println();
                            }
                        }
                         
                    else if (childElement.getNodeName().equals("list2")) {
                        //list2
                        //遍历节点方式2
                        //遍历所有属性
                        for (Node list2Node = childElement.getFirstChild(); 
                                list2Node != null;
                                list2Node = list2Node.getNextSibling()) {
                            if (!(list2Node instanceof Element)) {
                                continue;
                            }
                            NamedNodeMap attributes = ((Element)list2Node).getAttributes();
                            System.out.print("person:");
                            for (int counter = 0; counter < attributes.getLength(); counter++) {
                                Node attribute = attributes.item(counter);
                                if (attribute == null) {
                                    continue;
                                }
                                String name = attribute.getNodeName();
                                String value = attribute.getNodeValue();
                                System.out.print(name + "=" + value + ";");
                            }
                            System.out.println();
                        }
                         
                    else if (childElement.getNodeName().equals("text")) {
                        //text
                        //获取文本值
                        Text textNode = (Text)childElement.getFirstChild();
                        String text = textNode.getData().trim();
                        System.out.println("text:" + text);
                    }
                }
            }
 
        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();
        catch (Exception e) {
            e.printStackTrace();
        }
         
    }
}
控制台中输出结果如下:
根节点名:root
节点名:list1
person:id=101;name=Tsybius;remark=1;
person:id=102;name=Galatea;remark=2;
person:id=103;name=Quintus;remark=3;
person:id=104;name=Atia;remark=4;
person:id=105;name=Justitia;remark=5;
节点名:list2
person:id=201;name=Zhang;remark=a;
person:id=202;name=Wang;remark=b;
person:id=203;name=Li;remark=c;
person:id=204;name=Zhao;remark=d;
person:id=205;name=Liu;remark=e;
节点名:text
text:TEXT

POPTEST老李分享DOM解析XML之java的更多相关文章

  1. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  2. Java从零开始学四十二(DOM解析XML)

    一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...

  3. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  4. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  5. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  6. 老李分享:导出xml报告到手机

    老李分享:导出xml报告到手机   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...

  7. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  8. 简单谈谈dom解析xml和html

    前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...

  9. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

随机推荐

  1. 不惧面试:HTTP协议(3) - Cookie

    v博客前言 先交代下背景,写这个系列的原因是总结自己遇到的面试题以及可能遇到的题目,更重要的是,今年定的目标是掌握网络这一块的知识点,先是搞懂HTTP协议,然后是TCP/IP协议,再就是WCF如何运用 ...

  2. 【CNMP系列】CentOS7.0下安装MySql5.6服务

    接上一回的话,CentOS7.0下安装好了Nginx服务,对于我们的CNMP,我们可以开始我们的M啦,就是传统意义上的MySql服务 MySql简介 MySQL是一个关系型数据库管理系统,由瑞典MyS ...

  3. Java实现OOP(面向对象编程)

    一.对象的综述 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...

  4. 部署lamp

  5. redis命令大全

    redis windows下使用及redis命令 Redis 是一个开源,高级的键值对的存储.它经常作为服务端的数据结构,它的键的数据类型能够是strings, hashs, lists, sets( ...

  6. yum的用法

    yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...

  7. 深入理解Node系列-细说Connect(上)

    前言 想必对于广大前后端的同学们,Node 或是用来作为网站服务器的搭建,亦或是用来作为开发脚手架的运用,或是早有套路,亦或是浅尝辄止.从现在开始博主将会不定时的对 Node 系列的产品做分析,其中夹 ...

  8. MyBatis 源码分析——类型处理器

    官网上面讲到:无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型.那 ...

  9. ERP实施顾问工作中应努力做到哪些?

    1.树立并分享信誉 准确的为自己定位,并积极树立自己的信誉.从这样两个角度去考虑问题,一是从高层管理者的角度去思考行业竞争和公司运作的问题,一是从专业.细致的角度去考虑单据.报表.界面等数据处理的问题 ...

  10. C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)

    3.空指针(nullptr) 早在 1972 年,C语言诞生的初期,常数0带有常数及空指针的双重身分. C 使用 preprocessor macroNULL 表示空指针, 让 NULL 及 0 分别 ...