浅出Java 的Xml编程(转贴)

【Java编程】SAX XML Parser解析、生成XML文件 1、优缺点 优点: SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题。其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求。由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用。支持 XPath 查询 阅读详情
 

浅出Java 的Xml编程

作者:何双江(yarshray)

对于Xml,我的认识是,一个用来存放数据的标准格式.怎么看我都觉得XML和Html,完全不一样,也许仅仅只是都使用了标记来作为文档解释的原因吧.所以人们才喜欢把XML和HTML对比来看.对于我个人而言,XML就是一个简单方便的数据文件.因为.它不同与一般的关系型数据库,把数据看出二维表.通过基本的关系运算,获取二维表中的数据.XML仅仅把数据当成一个文档,然后正对文档解析获取数据.所以我的看法是,要操作XML文档,只要一个能够解释XML的文档解释器就可以了.然后把解释的内容.转变成程序所需要的数据就可以了.当操作完毕也可以把数据写回去.因此,这里主要介绍两中XML文档解释器,和java相关的Api.它们分别是DOM和SAX.及JDOM.

为了方便起见,我们需要一个简单的XML作为本文的示例参考:这个XML的主要目的是为了存放我的书籍信息.包括书名,书的作者,书的价格,书的编号.几个基本信息,

XML示例如下:

<?xml version="1.0" encoding="gb2312"?>

<Books>

<Book id="1">

<bookName>

编程珠玑

</bookName>

<bookAuthor>

Jon Bentley

</bookAuthor>

<bookISBN>

7-5083-1914-1

</bookISBN>

<bookPrice>

28.0

</bookPrice>

</Book>

<Book id="2">

<bookName>

Java编程思想(第2版)

</bookName>

<bookAuthor>

Bruce Eckel

</bookAuthor>

<bookISBN>

7-111-10441-2

</bookISBN>

<bookPrice>

99.0

</bookPrice>

</Book>

<Book id="3">

<bookName>

Inside VCL(深入核心VCL架构剖析)

</bookName>

<bookAuthor>

李维

</bookAuthor>

<bookISBN>

7-5053-9489-4

</bookISBN>

<bookPrice>

80.0

</bookPrice>

</Book>

</Books>

该XML记录了三本书和其相关的信息.

大体上操作XML文档可以分为三个步骤.

1.创建XML解释器

2.通过XML解释器和XML文件建立关联

3.通过XML解释器解释XML标记

XML解释器的类型.基本上可以分为:

? 验证和非验证解析器

? 支持一种或多种 XML Schema 语言的解析器

? 支持 Document Object Model (DOM) 的解析器

? 支持 Simple API for XML (SAX) 的解析器

这里主要介绍后两种.解释器.

Document Object Model(DOM)解释器:

Dom解释器是由W3C官方制定的标准解释器Api.只要符合该标准的编程接口都可以用来操作XML.目前该解释器主要有三个级别.Level1 Level2 Level3 这里只讨论到Level2.Dom模型实际上是把XML文件中的数据转变成了内存中的一颗树.该树大体有Doument Note NodeList Element这些对象构成.而Dom则是负责分析这颗树的结构,然后通过解释树从而起到了解释XML文档的作用.这里值得注意的是由于操作的树型结构.所以对于有些情况该解释器是无法分清楚的.例如属性值:

Id="1"

Id=

"1"

Id='1'

这对于Dom而言是完全相同的.因为.对于文档的格式Dom并不做任何解释.它仅是把文档中的数据转变成一颗树而已,原有的文档格式并不DOM中出现.

 

Simple API for XML (SAX) 的解析器

SAX解释器,可以说是一个把具体操作留给编程人员而把解释工作留给自己的一个编程模型.它并没有向DOM那样把整个XML文档加载到内存而是逐行解释然后通过事件通知给程序,由具体的程序使用这些通知,然后加以处理,这里就好像编写事件驱动的代码一样.因而就内存的占用率和解释效率而言SAX是有其适用性的.对于具体环境DOM和SAX都有其具体的应用面.

SAX的事件主要包括

文档的开始startDocument事件

对于元素而言的startElement和endElement

对于处理字符文本的characters 事件

以及文档的结束endDocment事件

JDOM API

DOM和SAX虽然提供了非常丰富的功能.可是对于开发人员而言这同时也带来巨大的负担.因为太过复杂,因此开源社区推出了的Jason Hunter 和 Brett McLaughlin 两位JAVA专家推出了JDOM作为一个比较简单的API.JDOM在背后会提供适配器选择具体的XML解释器.同样它也提供了树型结构来处理XML,而JDOM的树更简介.因此它兼顾了DOM和SAX的有点.当然也降低了灵活性.因此如果单纯的使用JDOM也是一个不错的选择.

三种API的对本

DOM 模型:

需要对整个文档结构有整体了解的情况

需要修改文档结构的情况

需要多次引用该文档的情况

SAX模型:

内存占有要求有限的情况

只需要读取XML部分元素的情况

只需要引用XML文档一次的情况

XML 文档对象模型(DOM)简介:

DOM由W3C推出的目的是为了提供一个良好的分析结构,用于操作XML中的标记.这个模型和类似于HTML的标记分析模型.它提供了一组操作接口,可以被各个具体平台所实现.因此可以选择任何满足DOM的解释器所提供的编程接口所实现的应用程序.将会很方便的移植到其他实现了DOM编程接口的平台工作.

对于标准DOM而言.它提供了的接口是一组可以描述XML文档树型结构的对象,以及通过这些对象可以对XML文档操作的方法.而应用程序只要调用这些对象以及对象操作.就等于在操作XML文件.这样就简化了XML文件的操作.使得编程接口足够的抽象.那么也就是说要熟悉DOM编程模型我们首要的就是熟悉DOM所提供的对象和方法.

下面我们就逐个熟悉DOM所提供的对象和方法:

Document:

该对象所描述的是整个XML文档.也就是整个树.对于树而言它可以表示为包含了很多节点的整体对象.而这些节点统称为Node.

Node:

node是一个相对抽象的概念,因此在java的定义中node被描述为接口.该接口扩展了几个子接口.

Element: 表示文档中的元素

Attribute:表示XML文件中的属性

Text:表示节点中的文字

其他的节点类型包括:Comment 表示 XML 文件中的注释、ProcessingInstruction 表示处理指令、CDATASection 表示 CDATA 节。对于这些有兴趣的读者可以参考相关文档.这里就不一一详解.

处理 DOM 经常要用到以下方法:

Document.getDocumentElement():返回 DOM 树的根。(该函数是 Document 接口的一个方法,没有定义其他的 Node 子类型。)

Node.getFirstChild() 和 Node.getLastChild():返回给定 Node 的第一个和最后一个孩子。

Node.getNextSibling() 和 Node.getPreviousSibling():返回给定 Node 的下一个和上一个兄弟。

Element.getAttribute(String attrName):对于给定的 Element,返回名为 attrName 的属性的值。如果需要 "id" 属性的值,可以使用 Element.getAttribute("id")。如果该属性不存在,该方法返回一个空字符串 ("")。

下面我们来做基本的DOM的示例,该示例很简单只是简单的显示上面的Book.xml文档中的内容.这也是DOM所做的基本事情.

代码如下:

import javax.xml.parsers.*;

import org.w3c.dom.*;

public class DomXml{

public static void main(String[] args)throws Exception{

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder bulider=factory.newDocumentBuilder();

Document doc=bulider.parse("BookXml.xml");

NodeList nl=doc.getElementsByTagName("Book");

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

Element node=(Element)nl.item(i);

System.out.println("BookName is :" +

node.getElementsByTagName("bookName").item(0).getFirstChild().getNodeValue().trim());

System.out.println("BookAuthor is :" +

node.getElementsByTagName("bookAuthor").item(0).getFirstChild().getNodeValue().trim());

System.out.println("BookISBN is :" +

node.getElementsByTagName("bookISBN").item(0).getFirstChild().getNodeValue().trim());

System.out.println("BookPrice is :" +

node.getElementsByTagName("bookPrice").item(0).getLastChild().getNodeValue().trim()+"/n/n");

}

}

}

Java XML编程全解 本文还有配套的精品资源,点击获取 简介:本书为Java开发者提供了处理XML技术的全面指南,涵盖了XML基础知识、各种解析技术、数据绑定、查询与转换方法,以及XML在Web服务和配置管理中的应用。深入解析了DOM、SAX、StAX解析技术,JAXB数据绑定,XPath查询,XSLT转换,以及XML Schema验证等关键XML技术。同时,书中还介绍了如何在Java中使用SO... 阅读详情

相关推荐

Java XML编程从入门到精通

htmltable {th, td {th {pre {简介:《Java XML编程指南》是一本专为Java开发者编写的实用指南,重点讲解了XML在Java环境中的应用,包括数据处理、通信等。书中深入介绍了XML的基础知识、在Java中的解析方法(如DOM、SAX和StAX),并涵盖了使用JAXB进行对象到XML的映射、JAXP的XML处理标准接口、XML Schema和DTD的定义、以及如何创建和消费SOAP服务。

weixin_31974443的博客 924

浅出Java 的Xml编程

浅出Java 的Xml编程作者:何双江(yarshray)对于Xml,我的认识是,一个用来存放数据的标准格式.怎么看我都觉得XML和Html,完全不一样,也许仅仅只是都使用了标记来作为文档解释的原因吧.所以人们才喜欢把XML和HTML对比来看.对于我个人而言,XML就是一个简单方便的数据文件.因为.它不同与一般的关系型数据库,把数据看出二维表.通过基本的关系运算,获取二维表中的

何双江(yarshray)的专栏 4214

Java与XML集成编程全面指南

本文还有配套的精品资源,点击获取 简介:《Java XML编程指南》系统阐述了Java与XML的结合使用方法,涵盖了XML基础知识、JAXP、XPath、XSLT、RESTful服务、JAXB以及Spring框架中的XML配置。本书帮助读者掌握XML技术在Java应用程序中的应用,从基础到高级概念,包括数据处理、网络通信以及Web服务开发等。 1. XML基础语法和结...

weixin_35886636的博客 803

浅出Java 的Xml编程(转载)

  对于Xml,我的认识是,一个用来存放数据的标准格式.怎么看我都觉得XML和Html,完全不一样,也许仅仅只是都使用了标记来作为文档解释的原因吧.所以人们才喜欢把XML和HTML对比来看.对于我个人而言,XML就是一个简单方便的数据文件.因为.它不同与一般的关系型数据库,把数据看出二维表.通过基本的关系运算,获取二维表中的数据.XML仅仅把数据当成一个文档,然后正对文档解析获取数据.所以我的

谢小进的专栏 721

RAID 0/1/5/10 性能实测:4块 SATA SSD 组阵列,顺序读写速度对比

本文通过实测对比了RAID 0/1/5/10在4块SATA SSD上的顺序读写性能,详细展示了不同RAID级别的配置方法、理论性能与实际测试数据。测试结果显示,RAID 0在顺序读写速度上表现最佳,而RAID 10则在性能与数据安全之间取得了平衡,适合数据库服务器等关键应用场景。

weixin_33462167的博客 424

基于docker进行安装部署seata,解决Seata的版本与Nacos的版本不匹配

本文分享了在Docker环境下部署Seata时遇到Nacos 3.x API不兼容问题的解决方案。由于Seata 2.0.0内置的nacos-client 1.4.2无法调用Nacos 3.x重构后的接口,导致注册失败。通过下载Seata 2.6.0源码自行构建Docker镜像,并调整启动方式(直接执行Java命令绕过Shell脚本),最终成功实现与Nacos 3.x的集成。关键步骤包括:创建自定义Dockerfile、配置application.yml、处理启动脚本兼容性问题,最终采用java直接运行方案

Dd52698的博客 407

简析JAVA的XML编程

  XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的电子政务开发较早的引入了XML,所以尝到了许多甜头,在许多项目中利用XML数据交换信息,省去了许多麻烦事,不用制定繁锁的数据格式,利用XML数据易于表达,也利于一线开发者跟踪调试

!Java 1940

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2387

[转载]利用JAVA技术进行XML编程

利用JAVA技术进行XML编程关于本教程 在过去几年中,XML 已经成为一种通用的数据格式。这篇经过修订的教程将向您介绍 Java 语言中处理 XML 文档最常用的编程接口。 最普通的 XML 处理工作是 解析 XML...

congji3817的博客 249

基因组研究之单倍型T2T基因组(一)

单倍型T2T基因组(Haplotype-resolved T2T genome)是一种高精度、高连续性、高完整性的基因组组装技术,它能够提供从端粒到端粒的完整基因组序列,包括所有的基因和非编码序列。完整覆盖:T2T基因组覆盖从端粒到端粒的染色体序列,包含所有的基因和非编码序列,包括以往难以解析的端粒和着丝粒区域。单倍型解析:单倍型T2T基因组能够区分来自父母本的遗传信息,进行亚基因组不对称演化研究,挖掘单倍型等位基因间的表达差异,这对于重测序、性状定位、进化、基因功能、基因编辑等研究至关重要。

2401_89507557的博客 2438

基于未来出行解决方案的场景实例:城市空中交通(UAM)的飞行路径规划与避障

本文介绍了使用Simulink进行城市空中交通(UAM)飞行路径规划与避障的仿真方法。主要内容包括:1)UAM系统架构与核心挑战;2)详细建模步骤,从城市3D环境构建到飞行器动力学模拟;3)全局路径规划(A*/RRT*)和局部避障(DWA/APF)算法实现;4)多机协同与冲突解决;5)关键场景仿真与性能评估;6)高级功能拓展方向。通过Simulink的数字孪生系统,可有效验证UAM在复杂城市环境中的可行性,为未来立体交通发展提供技术支撑。

xiaoheshang_123的博客 257

JAVA编程中更新XML文档的常用方法

JAVA编程中更新XML文档的常用方法    JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。为了增强JAXP使用上的灵活性,开发者特别为JAXP设计了一个Pluggability Layer,在Pluggability Layer的支持之下,JAXP既可

为理想而奋斗 1551

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2628

[转载]Java与XML联合编程

Java与XML联合编程从XML诞生之日起,它就一直是业界的焦点话题之一。经过了几年的发展,XML技术日趋成熟,现在越来越多的应用都是基于XML开发的。在 Internet日益普及的今天,分布式编程日显重要,越来越多的应用都开...

congji3817的博客 163

YOLOv8推理程序

YOLOv8单独推理,有时候我们自定义的模块算子无法正常转换为其他框架,而且需要做成应用,因此需要一个单独推理的程序,返回的是识别后的照片还有各个类别及其对应数量。文章最后给出Flask封装为Server以及调用的实例还有Client请求代码,支持几十路多线程并发,只需加载一次模型,后边推理即可。

AIOT魔法师 698

12、激光制造中人工智能与机器学习的应用及挑战

本文探讨了人工智能与机器学习在激光制造中的应用,重点分析了图像分类技术在质量检测中的多种方法及其性能对比,包括基于贝叶斯分类、卷积神经网络(CNN)和多尺度CNN的技术。同时,文章指出了AI在激光制造中面临的五大挑战:鲁棒性、安全性、可解释性、责任归属和可预测性,并提出了相应的解决思路。此外,还介绍了激光制造的主要应用技术如切割、焊接和增材制造的流程、优势与局限性,并通过对比表格直观展示不同技术的特点。最后展望了未来激光制造向智能化、自动化和可持续化发展的趋势。

rgv234567的博客 138

(Step one)利用JAVA进行XML编程

刚接触Java的XML编程,而又无从所起的人,可以参考一下这篇资料,本文来自IBM《利用Java技术进行XML编程,第一部分》,还有第二第三部分,不过暂时没找到,有兴趣的话可以去Google查找一下,还有介绍一下,IBM中国是个不错的Java学习网站。下面开始正文内容的介绍:(由于文章较长,这里分为上下两部分) 主菜单(上部分)一、简介二、解析器基础三、文档对象模型(DOM)四、Sim

dengxingbo的专栏 1096

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java xml 编程_Java-XML

1 importjava.io.File;2 importjava.io.StringWriter;34 importjavax.xml.parsers.DocumentBuilder;5 importjavax.xml.parsers.DocumentBuilderFactory;6 importjavax.xml.parsers.ParserConfigurationException;7 i...

weixin_39535349的博客 176

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

利用JAVA技术进行XML编程

在过去几年中,XML 已经成为一种通用的数据格式。这篇经过修订的教程将向您介绍 Java 语言中处理 XML 文档最常用的编程接口。 最普通的 XML 处理工作是 解析 XML 文档。解析包括读取 XML 文档并确定其结构和内容。XML 编程的一个好处是可以使用开放源代码的、免费的 XML 解析器读取 XML 文档。本教程主要讨论创建解析器对象、要求解析器处理 XML 文件、处理解析结果。如您所料...

海边夕阳 194

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

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

Java高级编程--XML

本文介绍了XML的基础知识和高级编程应用。主要内容包括:1) XML的特点与作用,如数据交换和配置应用;2) XML文档结构、标签语法和编写规范;3) XML解析技术,重点讲解了DOM、SAX和DOM4J三种解析方式;4) DOM解析XML的具体步骤和常用接口;5) DOM4J解析XML的常用方法。文章提供了XML文档示例和Java代码片段,帮助理解如何通过DOM和DOM4J技术实现XML文件的解析和操作。

2301_77287584的博客 798

XML编程

第二章 XML编程 目录 1、XML入门 1.1 XML介绍 ​ Extensible Markup Language,翻译过来为可扩展标记语言。Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此...

sdbdfhgf的博客 783
上一篇: 什么是XML(转贴)
下一篇: JSP学习心得(转贴)
navyforce
博客等级 码龄23年 356粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值