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 ...
随机推荐
- ubuntu18 bluebooth
QDBusPendingReply: type ManagedObjectList is not registered with QtDBus 19:36:14: The program has un ...
- (翻译) closures-are-not-complicated
总计:读完这篇文章需要20分钟 这篇文章讲解了闭包的一些内容,作者是拿ES5规范中的一些名词来讲的. 所以可能和博客上一篇文章中提到的binding object, (lexical enviro ...
- CentOS7 升级 python3 过程及注意
• 从官网下载python3的压缩包,解压(以3.5.1版本为例)• 创建安装目录(自定义)sudo mkdir /usr/local/python3• cd 进入解压目录sudo ./configu ...
- 记录一次vxworks下使用NFS组件的过程
问题:有三块CPU都运行vxworks6.9,现在想要CPU3做server,CPU1-2通过NFS访问CPU3上的文件 补充:使用防火墙可能会影响NFS访问,目前我还没有找到解决办法... 下面是过 ...
- csv解析框架Windmill的一个demo
csv文件内容如下,第一行是文件头 解析代码如下: package com.xxx; import lombok.Data; import org.apache.commons.lang3.build ...
- 使用XCode7打包动态库(Framework)
iOS中的静态库和动态库 概念 静态库(Static Library)以 .a 为后缀,它是你的源码的实现.m文件编译而成的二进制文件集合,需要配合上暴漏的.h文件使用,它在引用链接时拷贝至可执行文件 ...
- js的event详解
event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...
- 【leetcode_easy】530. Minimum Absolute Difference in BST
problem 530. Minimum Absolute Difference in BST 参考 1. Leetcode_easy_530. Minimum Absolute Difference ...
- Thinking - 一些有效阅读的方法
有策略,忌盲目.讲方法,别蛮干! 1- 阅读方法 1.1 做好眼前事 排除其他事项干扰,营造适合阅读的状态和环境,专注地投入阅读之中. 如果被一堆乱糟糟的事情烦扰,身心处于一个疲惫的状态,必然无法保持 ...
- 用例建模 Use Case Modeling
用例建模 以您的工程实践项目为例,在理解项目需求的基础上进行用例建模,抽取Abstract use case,画出用例图,并确定每一个用例的范围High level use case,对关键用例进一步 ...