XML解析之DOM解析

QT读写XML文件之DOM方式解析XML 一、DOM简介 1、DOM简介 DOM是Document Object Model的简写,即XML文档对象模型,是由W3C提出的一种处理XML文档的标准接口。DOM 一次性读入整个XML文档,在内存中构造为一棵树(DOM树)将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些。能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接 阅读详情

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。

XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。

针对以下XML文件,会对四种方式进行详细描述:

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

DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成了一棵节点树。无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。也就是说,DOM强制使用树模型来访问XML文档中的信息。由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。

DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项耗时的操作。所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM分析器所采用的树结构的思想与XML文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的使用价值的。

优点:

1、形成了树结构,有助于更好的理解、掌握,且代码容易编写。

2、解析过程中,树结构保存在内存中,方便修改。

缺点:

1、由于文件是一次性读取,所以对内存的耗费比较大。

2、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。

以下是解析代码:

package com.lzk;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

public class Main {
    public static void main(String[] args)  {
        //创建一个DocumentBuilderFactory的对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //创建一个DocumentBuilder的对象
        try {
            //创建DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //通过DocumentBuilder对象的parser方法加载resources文件下的books.xml的输入流
            InputStream in = Main.class.getClassLoader().getResourceAsStream("book.xml");
            Document document = db.parse(in);
            //获取所有book节点的集合
            NodeList bookList = document.getElementsByTagName("book");
            /*遍历所有book节点*/
            for (int i = 0;i<bookList.getLength();i++){
                Node book = bookList.item(i);
                //获取book节点的所有属性
                NamedNodeMap attrs = book.getAttributes();
                /*遍历所有属性*/
                for (int j = 0; j < attrs.getLength(); j++) {
                    Node attr = attrs.item(j);
                    /*获取属性名和属性值*/
                    String name = attr.getNodeName();
                    String value = attr.getNodeValue();
                    System.out.println(name + ":" + value);
                }
                /*获取book节点的所有子节点*/
                NodeList childNodes = book.getChildNodes();
                for (int j = 0; j < childNodes.getLength(); j++) {
                    Node childNode = childNodes.item(j);
                    /* 区分出text类型的node以及element类型的node*/
                    if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                        /*获取子节点名和节点值*/
                        String name = childNode.getNodeName();
                        String value = childNode.getFirstChild().getNodeValue();
                        System.out.println(name +":"+value);
                    }
                }
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

使用DOM解析XML和使用SAX解析XML java学习笔记——使用DOM解析XML和使用SAX解析XML 立即下载

相关推荐

R_柱状图(加误差线,显著性差异)

先放最终效果图 结果图 # bar_plot 2021/01/19 # 导入所需的包 library(ggplot2) library(ggthemr) library(ggsignif) library(tidyverse) library(dplyr) library(ggpubr) library(devEMF) # 导入并处理数据,需要两张表,一个是原始汇总表格,另外一些是每一...

wt141643的博客 2万+

Android学习笔记42:XML文件解析(DOM方式)

  在上一篇博文《Android学习笔记41:XML文件解析(SAX方式)》中,我们学习了如何使用SAX解析器对XML文件进行解析,从而获得我们想要的有用信息。   本篇博文主要介绍如何使用DOM解析器对XML文件进行解析。   1.DOM树中的对象类型   使用DOM解析XML文档时,整个XML文档会被转换成一颗DOM树,DOM解析器会将XML文档的节点对应转化成DOM树的每个节点。 ...

weixin_34097242的博客 270

记录思科cisco交换机升级iso步骤

Cisco Nexus 93180交换机版本升级

a635161812的博客 4376

xml文件的DOM解析

DOM模型介绍 bject Model:文档对象模型 Dom解析方法:xml文件解析首先将xml文件加载进内存,然后读取文件中的内容。 在内存将文件以树的结构进行保存,而且树根在上,树枝在下,整个xml文件被封装为 Document对象,文件中的标签节点被封装为Node对象,标签节点中保存的数据被封装为 Text对象。 DOM模型将整个xml文件封装为对象,将文件中的标签和数据封装为对象,利用对象提供的方法完成xml文件内容的读写。 Document: 表示整个文件对象 Node:表示标签对象 Text:表

Vicali的博客 744

伯德图逆向工程:用MATLAB从扫频数据中提取系统特性的5个关键步骤

本文详细介绍了使用MATLAB从扫频数据中提取系统特性的5个关键步骤,包括数据预处理、频响特性提取、相位解缠绕、系统特性反演和结果验证。通过伯德图逆向工程技术,工程师可以有效分析黑箱系统的频率响应特性,解决噪声干扰和相位跳变等实际问题,提升控制系统调试效率。

weixin_29081163的博客 195

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

使用DOM解析XML

项目中经常需要和XML打交道,例如调用第三方接口的接口返回值、入参之类的,更多的是XML的解析。常用的XML解析方式有DOM、SAX等。 1、DOM和SAX是Java官方提供的解析XML的方式,不需要导入额外的包 2、本篇讲述如何利用DOM解析XML格式文件: 以下面的demo.xml为例 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;...

分享传递价值 1162

Kubernetes CRD 系列(一):CRD 介绍

CR(Custom Resource)其实就是在 Kubernetes 中定义一个自己的资源类型,是一个具体的 “自定义 API 资源” 实例,为了能够让 Kubernetes 认识这个 CR,就需要让 Kubernetes 明白这个 CR 的宏观定义是什么,也就是需要创建所谓的 CRD(Custom Resource Definition)来表述。 可能这么说并不是太直观,换个方式表达一下,我们想要创建一个 Pod 的时候,那么会编写一个 YAML 配置,然后前两行一般会这么写: [root@l

会哭的雨@的博客 7920

XML( 可扩展编辑语言 ) —— DOM解析

1. 什么是DOM ? 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 标准 XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法(接口)。 换句话来说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 2. 节点 根据 DOM,XML 文档中的每个成分都是一个节点。 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中的文本是文本节点 每一个 XML 属性是一个属性节点

让优秀成为一种习惯! 1173

马达种类全解析:VCM、Stepper、Piezo 在手机相机中的驱动原理与工程差异

在现代手机影像系统中,马达承担着核心成像组件的动态调节任务,如自动对焦(AF)、光学防抖(OIS)以及变焦调节。目前主流采用三类驱动器件:VCM(Voice Coil Motor)、Stepper(步进马达)、Piezo(压电马达)。不同马达方案在结构复杂度、响应速度、功耗、驱动方式与模组厚度适配等方面差异显著,对成像系统的性能表现有直接影响。本文将结合最新旗舰设备的应用现状,系统剖析这三类驱动马达的工作原理、架构特点与工程应用经验,为工程实践中选型与调试提供参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3776

openclaw通俗入门系列6——记忆系统

记忆 = 智能体的笔记本,分长期(MEMORY.md)和每日(memory/日期.md)。只有写到文件里的才能记住!支持语义搜索(理解意思)+ 关键词搜索,还能自动在压缩前保存重要内容。

m0_60605453的博客 403

XML解析之DOM解析详解

一、概念 xml文件多用于信息的描述,所以在得到一个xml文档之后按照xml中的元素取出对应的信息就是xml的解析。Xml解析有两种方式,一种是DOM解析,另一种是SAX解析,两种操作的方式如图。       二、DOM解析   基于DOM解析的xml分析器是将其转换为一个对象模型的集合,用树这种数据结构对信息进行储存。通过DOM接口,应用程序可以在任何时候访问xml文档中的任何...

a1353206432的博客 2万+

流体动力学仿真软件:XFlow_(20).案例研究:声学仿真

在流体动力学仿真软件中,声学仿真是一个重要的应用领域。通过数值模拟,工程师和科研人员可以预测和分析流体系统中的声学现象,如气动噪声、声波传播和声场分布。这些仿真结果对于优化设计、降低噪声水平和提高系统性能具有重要意义。本节将详细介绍如何在流体动力学仿真软件中进行声学仿真,包括声学模型的选择、参数设置、后处理分析等内容,并通过具体的案例来说明这些步骤。

kkchenjj的博客 902

DOM方式:解析XML

DOM是Document Object。

zxf347085420的博客 1413

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

QT之XML文件解析DOM

QT使用DOM方式解析XML文档

qq_39295354的博客 1621

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

dom解析xml

Jaxp介绍 是开发包, 获得jaxp中dom解析器的步骤 ★java解析xml【dom技术】看原理: xml文件也看成一颗dom树,在内存里面是存在的 Dom特别适合做crud操作 由于加载到内存,所以不太适合操作比较大的文件 <foot>叫元素、标签、节点(叫节点,往往是加载到内存里面去了) dom会将xml中每一个元素、属性、文本,都映射成对应node对象/element对象 ★★★属性通过getattribute()获取,从这个角度讲他不是node节点,...

u014163736的博客 1719

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android之dom解析xml

好吧,我们还是来实现这张图的效果,只不过技术我们改为了dom,至于这里的图片上为什么显示的是sax解析,我只能说,哎,没办法,我想偷懒啊。嘿嘿……再看代码结构图:main.xml

梦中一夜下江南 1万+

【XML解析】使用Jaxp对XML进行DOM解析

【前言】    璐小编在之前学习BS的时候接触过XML(请戳:【XML】基础知识初步认识),后来在项目中我们也会遇到XML的配置文件,现在学习Java又遇到对XML的文档内容进行解析。看来对于XML的认知是不断加深的过程~    本篇简介XML解析的方式以及使用Jaxp对XML文档进行dom解析。 【XML解析】     对于XML解析方式,有DOM文档对象模型和SAX两种。前者是

王璐 1612

DOM解析XML

XML可以作为一种的简单数据存储。 DOM解析,是将XML中的数据组织成一棵树,树的一个一个节点就是XML文档中的数据。 DOM解析XML流程: 1.建立一个解析器工厂,将来创建解析器。 2.创建XML解析器。 3.创建DOM文档对象,设置doc路径。 4.使用DOM文档对象获取节点列表。 5.将节点列表中的每一个子节点分配给一个节点对象。 6.获取节点的内容。 XML信息:

经典的误导的专栏 838

DOM解析XML实例

dom(document object model)是一种用于XML文档的对象模型,可用于直接访问XML文档的各个部分。 dom允许用户遍历文档树,从父节点移动到子节点和兄弟节点,dom的实现常常讲所有的XML节点加载到内存中,较大的文档可能效率较低。 解析步骤: 解析XML文件得到Document对象 操作Document对象的一系列方法取出我们关心的数据 dom这样规

glu_cky的博客 486

XML文档解析及用dom解析xml

关于XML DOM模型更重要的参考资源: [url]http://www.w3school.com.cn/xmldom/dom_nodes.asp[/url] 一、前言 用Java解析XML文档,目前有以下方法: 首先是DOM,DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员...

sunnyday55555的博客 302

XML:DOM解析

XML解析 CRUD : create retrieve update delete XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。 sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。 X...

离开屏幕的光,哪盏灯照亮你的孤独? 300

Dom解析XML文件

public List getPersons(InputStream inStream) throws Exception{ List persons = new ArrayList(); //得到DocumentBuilder对象 DocumentBuilderFa

andrew 1535
上一篇: 读取properties配置文件的方法
下一篇: Java中的代理设计模式
多年以后1234
博客等级 码龄10年 25粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值