使用JAXP对XML文档进行DOM解析

一、XML解析方式分为两种:dom和sax

  • dom:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式。
  • sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它。

dom和sax解析方法的区别:

  • dom:对文档CRUD(增删改查)比较方便,缺点:占用内存比较大(将xml文件全部读入内存)。
  • sax:占用内存较少,解析速度快(从上往下读一行解析一行)。缺点:只适合读取,不适合CRUD。

XML解析开发包:Jaxp(sun)、Jdom、dom4j

今天学习Jaxp:

二、使用JAXP对XML文档进行DOM解析:

 

private static String filename="src/exam.xml"; public static Document getDocument() throws Exception{//1创建工厂DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//2得到dom解析器对象DocumentBuilder builder=factory.newDocumentBuilder();//3解析xml文档,得到代表文档的documentreturn builder.parse(filename);}

更加形象的描述为下图:

增,删,改 需要将更新后的内容在写到xml中

public static void writeXml(Document document) throws TransformerException{TransformerFactory factory=TransformerFactory.newInstance();Transformer tf=factory.newTransformer();//transform(Source xmlSource, Result outputTarget)tf.transform(new DOMSource(document), new StreamResult(filename) );}

三、实战演练:

books.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架><书><书名 name="xxx">影响力</书名><作者>罗伯特.西奥迪尼</作者><售价>90</售价></书><书><书名>JavaScript</书名><作者>JS</作者><售价>45</售价></书>
</书架>

读取XML文件,JUnit测试:

@Testpublic  void read() throws ParserConfigurationException, SAXException, IOException {DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");NodeList list= document.getElementsByTagName("书名");Node node= list.item(0);String content=node.getTextContent();System.out.println(content);}

递归遍历XML文件中的所有节点

    @Testpublic  void read1() throws ParserConfigurationException, SAXException, IOException {DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Node root=document.getElementsByTagName("书架").item(0);list(root);        }/** 递归遍历XML文件中的所有节点* */public  void list(Node node){if(node instanceof Element){System.out.println(node.getNodeName());}NodeList childs= node.getChildNodes();for(int i=0;i<childs.getLength();i++){Node child=childs.item(i);list(child);}}

添加节点到XML文件中:

    @Testpublic  void add() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element price=document.createElement("售价");//创建节点//把创建的节点添加到第一本书price.setTextContent("90");Element book=(Element) document.getElementsByTagName("书").item(0);book.appendChild(price);//把更新后的文档TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}

为标签添加属性:

    @Testpublic  void addAttr() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element bookname=(Element) document.getElementsByTagName("书名").item(0);bookname.setAttribute("name", "xxx");//把更新后的文档TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}

删除操作:

@Testpublic  void delete() throws ParserConfigurationException, SAXException, IOException, TransformerException{DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();Document document=builder.parse("src/books.xml");Element bookname=(Element) document.getElementsByTagName("售价").item(0);//把更新后的文档Element e=(Element) document.getElementsByTagName("书").item(0);e.removeChild(bookname);TransformerFactory tfactory=TransformerFactory.newInstance();Transformer tf=tfactory.newTransformer();tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));}

快乐学习,轻松掌握!

 

转载于:https://www.cnblogs.com/lyjs/p/4858814.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tfpose与openpose区别_人体姿态识别--Openpose+Tensorflow

目的复现代码完成视频中的人体姿态识别复现过程视频来源&#xff1a;https://www.youtube.com/watch?vcMhWNGBW1Xg​www.youtube.com视频动图检测结果下载的画质本来就不高&#xff0c;再加上两次录屏&#xff0c;画质比较渣。首先确认工程所需要的依赖&#xff1a;python3ten…

让 步( 写的太好了!)

一个不懂得为亲人让步&#xff0c;为朋友让步&#xff0c;为爱人让步&#xff0c;为合作伙伴让步的人&#xff0c;是缺乏胸襟的人&#xff0c;最无能和不可交的人。试问一个连自己人都斤斤计较的人可交往吗&#xff01;长不大的人最重要的标志&#xff0c;就是跟自己人&#xf…

Android学习手记(2) Activity生命周期

1. 单个Activity的生命周期 当只有一个Activity的时候&#xff0c; 首先执行onCreate->onStart->onResume。 这时&#xff0c; 窗口便显示在屏幕上了。 然后我们按返回键退到桌面的时候&#xff0c;便执行onPause->onStop。这时候&#xff0c; 如果我们在最近使用程序…

MySQL二级比office二级_如何快速拿到计算机office二级

计算机二级考试是全国计算机等级考试(简称NCRE)四个等级中的一个等级&#xff0c;考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。计算机二级考试采用全国统一命题、统一考试的形式。多被国企和大型企业考核员工薪资的一个标准同时也是在信息化时…

墙角的父亲(一篇让千万人潸然泪下好文)

前言&#xff1a;拥有思想的瞬间&#xff0c;是幸福的&#xff1b;拥有感受的快意&#xff0c;是幸福的&#xff1b;拥有父爱也是幸福的。帮老乡大将搬家。在整理一堆旧书籍的时候&#xff0c;大将蹲在地上呜呜大哭起来。大将打开的是一个笔记本&#xff0c;上面记着日常开支&a…

移动广告效果监测

android渠道包自动化验证 酷传应用统计 友盟统计分析平台 机锋统计 怎样监控移动互联网广告的效果 talkingdata AD tracking转载于:https://www.cnblogs.com/terrylin/p/4865462.html

react遍历对象的值_React 原理之实现 createElement 和 render 方法

前言在 React 中&#xff0c;我们都知道可以写 jsx 代码会被编译成真正的 DOM 插入到要显示的页面上。这具体是怎么实现的&#xff0c;今天我们就自己动手做一下。实现 createElement 方法这个方法平时开发我们并不会用到&#xff0c;因为它是经 babel 编译后的代码&#xff0c…

成熟就是深谙世故却不世故

对于一个打小在农村长大的孩子而言&#xff0c;被夸作“早熟”是一种荣耀。它意味着你足够懂事&#xff0c;可以分担父母的一些忧愁。但这也是一个怪圈&#xff0c;因为你常要背负这种光环去做一些超乎自己年龄的事&#xff0c;强迫自己变得坚忍、不可战胜。那年&#xff0c;我…

2015/10/9 Python核编初级部分学习总结

终于在十一长假之后的两天看完了《Python核心编程》的初级部分。虽然到后来两章&#xff0c;类和环境看得越来越慢&#xff0c;越来越难以理解。很多东西只能靠强记&#xff0c;也没办法真正掌握了&#xff0c;我想了想&#xff0c;还是不强迫自己去背下这些知识&#xff0c;累…

SQl常用语句总结(持续更新……)

创建示例数据库USE master;GOIF DB_ID (Nmytest) IS NOT NULLDROP DATABASE mytest;GOCREATE DATABASE mytest;GOUSE mytest;GOIF OBJECT_ID(Ndbo.Orders) IS NOT NULLDROP TABLE dbo.Orders;GOCREATE TABLE dbo.Orders(ProductID INT NOT NULL,MadeFrom CHAR(20),Sales MONEY …

大话设计模式笔记 享元模式

享元模式&#xff08;Flyweigh&#xff09;&#xff0c;运用共享技术有效地支持大量细粒度的对象。 package flyweight;//可以接受并作用于外部状态 public abstract class Flyweight {public abstract void operation(int extrinsicState);} package flyweight;//为内部状态增…

python12岁_12岁。Python操作Excel,12Python,excel

excel在Python中的应用存测试数据有的时候大批量的数据&#xff0c;存到txt文件里显然不是最佳的方式&#xff0c;我们可以存到excel文件里面&#xff0c;第一方便我们存储数据和做数据&#xff0c;一方面方便我们读取数据&#xff0c;比较明朗。测试的时候就从数据库中读取出来…

什么叫工作到位?很深刻!

1、汇报工作说结果不要告诉老板工作过程多艰辛&#xff0c;你多么不容易&#xff01;老板不傻&#xff0c;否则做不到今天。举重若轻的人老板最喜欢&#xff0c;一定要把结果给老板&#xff0c;结果思维是第一思维。2、请示工作说方案不要让老板做问答题&#xff0c;而是要让老…

react 给一个引用的组件添加新属性_高阶组件在React中的应用

高阶组件的定义接受React组件作为输入&#xff0c;输出一个新的React组件。概念源自于高阶函数&#xff0c;将函数作为参数&#xff0c;或者输出一个函数&#xff0c;如map&#xff0c;reduce&#xff0c;sort。 用haskell的函数签名来表示&#xff1a; hocFactory:: W: React.…

杂想 · 警醒

今天无意间看到CSDN上一位大牛师姐的博客&#xff0c;真的是好惊讶啊&#xff01;很多时候总是太过自以为是&#xff0c;以为自己做不到的事情别人也很难做到。恰恰相反&#xff0c;成功总是伴随那些谦逊、努力、认真的人的&#xff01;曾几何时&#xff0c;自己或许也是一个认…

好好的活,简简单单过!

生命&#xff0c;每个人只有一次&#xff0c;或长或短&#xff1b;生活&#xff0c;每个人都在继续&#xff0c;或悲或欢&#xff1b;人生&#xff0c;每个人都在旅途&#xff0c;或起或伏。人无完人&#xff0c;事无完美&#xff0c;有些小人&#xff0c;你不须计较&#xff0…

SQL Server 中创建数据库、更改主文件组示例

以下示例在 SQL Server 实例上创建了一个数据库。该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。主数据文件在主文件组中&#xff0c;而用户定义文件组包含两个次要数据文件。ALTER DATABASE 语句将用户定义文件组指定为默认文件组。然后通过指定用户定义文件…

lunixs 退出mysql_MySQL的基本操作

1、数据库登录格式&#xff1a;mysql -h主机地址 -u用户名 -p用户密码 -P端口 -D数据库 -e “SQL内容”[rootwulaoer ~]# mysql -uroot -p2、修改密码格式&#xff1a;mysqladmin -u用户名 -p旧密码 password 新密码[rootwulaoer ~]# mysqladmin -uroot password 123456注&…

交际中你所不知道的说话的12个技巧!

1.“有一说一”和“自以为是”不同&#xff0c;别把粗鲁当成真性情与 他人相处&#xff0c;要遵循一个基本原则&#xff1a;己所不欲&#xff0c;勿施于人。你可以真挚地描述自己的感受&#xff0c;前提是不要带有攻击性&#xff0c;至于对他人做出评价和判断&#xff0c;则需要…