2.1 使用JAXP 对 xml文档进行DOM解析
//使用 jaxp 对xml文档进行dom解析
public class Demo2 { //必要步骤
@Test
public void test() throws Exception { //1.创建工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //2.得到dom解析器
DocumentBuilder db = dbf.newDocumentBuilder(); //3.解析XML文档,得到代表文档的Document
Document d = db.parse("src/com/xml/javaweb/book.xml"); }
}
示例:对xml节点进行增删改查
public class Demo3 {
//读取XML文件中:<书名>javaWEB</书名> 节点中的值
@Test
public void read() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); NodeList list = d.getElementsByTagName("书名");
Node node = list.item(1);
String text = node.getTextContent();
System.out.println(text);
} //遍历整个XML文档中的节点
@Test
public void read1() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //得到根节点
NodeList list = d.getElementsByTagName("书架");
Node root = list.item(0);
list(root);
} private void list(Node root) {
if(root instanceof Element)
System.out.println(root.getNodeName()); NodeList nodelist = root.getChildNodes();
for(int i = 0;i<nodelist.getLength();i++) {
Node node = nodelist.item(i);
list(node);
}
} //拿到 name 属性的值
@Test
public void read2() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); Element node = (Element) d.getElementsByTagName("书名").item(0); //node 里面的方法不够用了 没有指定名字得到属性,在知道得到的是Element的情况下 ,把node强转一下
String att = node.getAttribute("name");
System.out.println(att);
} //向XML文档中添加节点 <售价>39.00元</售价>
@Test
public void add() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //创建节点
Element element = d.createElement("售价");
element.setTextContent("39.00元"); //添加节点
Node node = d.getElementsByTagName("书").item(0);
node.appendChild(element); //更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(d), new StreamResult(new FileOutputStream("src/com/xml/javaweb/book.xml")));
} //向XML文档中指定位置添加节点 <售价>39.00元</售价>
@Test
public void add2() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //创建节点
Element element = d.createElement("售价");
element.setTextContent("29.00元"); //得到参考节点
Element ref = (Element) d.getElementsByTagName("售价").item(0); //添加节点
Node node = d.getElementsByTagName("书").item(0); //往“书”节点的指定位置插入节点
node.insertBefore(element, ref); //在参考节点之前插入新建的节点 //更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(d), new StreamResult(new FileOutputStream("src/com/xml/javaweb/book.xml")));
} //向XML文档节点上添加属性 <书名> java就业培训课程</书名> 上添加属性 name = "xxxx"
@Test
public void add3() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //得到要添加属性的节点
Element element= (Element) d.getElementsByTagName("书名").item(0);
//往指定节点添加属性
element.setAttribute("name", "xxxx"); //更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(d), new StreamResult(new FileOutputStream("src/com/xml/javaweb/book.xml")));
} //删除XML文档节点 <售价>39.00元</售价>
@Test
public void delete() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //得到要删除的节点
Element element= (Element) d.getElementsByTagName("售价").item(1);
//得到要删除的节点的父节点 再调用父节点中删除子节点的方法
element.getParentNode().removeChild(element); //更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(d), new StreamResult(new FileOutputStream("src/com/xml/javaweb/book.xml")));
} //更新XML文档节点 <作者>张孝祥</作者> -> <作者>xzk</作者>
@Test
public void update() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse("src/com/xml/javaweb/book.xml"); //得到要更新的节点
Element element= (Element) d.getElementsByTagName("作者").item(1);
//更新该节点的文本
element.setTextContent("xzk"); //更新XML文档
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(d), new StreamResult(new FileOutputStream("src/com/xml/javaweb/book.xml")));
}
}
2.1 使用JAXP 对 xml文档进行DOM解析的更多相关文章
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- 使用JAXP对XML文档进行DOM解析
import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers. ...
- javaweb学习总结十一(JAXP对XML文档进行DOM解析)
一:将内存中写好的xml文件读取到硬盘上 二:DOM方式对xml文件进行增删改查 1:添加节点(默认是在最后的子节点后面添加) @Test // 向元素中添加节点<version>1.0& ...
- 2.2 使用 JAXP 对XML文档进行SAX解析
使用JAXP 对 XML文档进行 SAX解析: public class Demo1 { /** * 使用JAXP对XML文档进行SAX解析 * @throws Exception * @throws ...
- javaweb学习总结十二(JAXP对XML文档进行SAX解析)
一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 <?xml version="1.0" enco ...
- XML文档读取-DOM
DOM(Document Object Model),“文档对象模型”早期是为了解决不用浏览器间数据兼容问题提出的解决方案,现在已经是W3C组织推荐的处理可扩展标志语言的标准编程接口. W3C DOM ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- 使用Dom4j对XML文档创建与解析
创建XML文件: public class Dom4jCreateXml { public void testCreatXml() { //创建文档对象 Document document = Doc ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_22-页面静态化-静态化测试-静态化程序测试
测试service内些的静态化的方法 先新建一个测试类 模板的id 放到下拉的静态数据里面 这样这条数据 就是用用的轮播图005这个模板 把这条数据静态化 进入到断点里面.先获取数据模型 获取模板时 ...
- [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)
1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...
- linux双机热备份
使用HeartBeat实现高可用HA的配置过程详解 一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供 ...
- 相机用的 SD Card 锁Lock 烂掉了,无法正常写入
没错,又碰到奇奇怪怪的SD Card Lock 烂掉了 , 无法正常写入,不要急,千万不要扔了,拿起透明胶粘在 Lock 处,注意不要粘住金手指哦,再放回去就可以读写了,但是透明胶不耐摩擦,用了几次 ...
- [Tensorflow] 使用 model.save_weights() 保存 / 加载 Keras Subclassed Model
在 parameters.py 中,定义了各类参数. # training data directory TRAINING_DATA_DIR = './data/' # checkpoint dire ...
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
[编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...
- 最新 快乐阳光java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.快乐阳光等10家互联网公司的校招Offer,因为某些自身原因最终选择了快乐阳光.6.7月主要是做系统复习.项目复盘.Leet ...
- Minimizing Difference 【思维】
题目链接: https://vjudge.net/contest/336389#problem/B 题目大意: 给出一个长度为n的数列以及操作次数k.k的范围为1e14.每次操作都可以选择给任意一个数 ...
- 【leetcode算法-简单】1.两数之和
[题目描述] 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- poj1222(高斯消元法解异或方程组+开关问题)
题目链接:https://vjudge.net/problem/POJ-1222 题意:给定一个5×6的01矩阵,改变一个点的状态时它上下左右包括它自己的状态都会翻转,因为翻转2次等价与没有翻转,那么 ...