xml解析-jaxp之dom解析
package day06_parser.dom;
/**
* xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写,
* 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。
* 以下我们研究两种解析方式:
* 1.dom解析 2.sax解析:Simple API for XML
* 以下是dom解析的实例。
* JAXP-DOM解析实例:
* 以下的实例实现的功能是,通过javax.xml包实现dom方式的xml的解析
* 详细的操作有添加节点,删除节点,改动节点内容,查询节点信息
*/
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.*;
public class DOMCURD {
//可以用junit測试工具的方法进行測试
public static void main(String[] args) throws Exception{
demo05();
}
//获取和解析器关联的Document对象
@Test
public static void demo01() throws Exception{
//==============获得document==========================
//1.获得工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.获得解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//3.依据解析器获取Document对象
@SuppressWarnings("unused")
Document document=builder.parse(new File("db.xml"));
}
//查询
public static void demo02() throws Exception{
//1.获得document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//2.获得根元素--books(可以省略)
@SuppressWarnings("unused")
Element rootElement=document.getDocumentElement();
//3.获取全部的book元素。属性id
NodeList allBookElements=document.getElementsByTagName("book");
//4遍历book元素----本实例db.xml中有两个book元素
for(int i=0;i<allBookElements.getLength();i++){
Element childNode=(Element)allBookElements.item(i);
System.out.println(i);
//4.1获取book元素的id属性
String id=childNode.getAttribute("id");
System.out.println("###id:"+id);
System.out.println(childNode.getNodeName());
//4.2获取book元素下的子节点
NodeList childNodeList=childNode.getChildNodes();
//注意文本也是节点,所以回车换行的部分会是文本,也会加入到上面定义的childNodeList中
//遍历
for(int j=0;j<childNodeList.getLength();j++)
{
//做推断-是否是非文本节点
Node childNode2=childNodeList.item(j);
//有两种方式推断是否一定是元素
//================方法1=========================
if(childNode2.getNodeType()==Node.ELEMENT_NODE)
{
//获取标签的名称
System.out.print(childNode2.getNodeName());
System.out.println(":");
//获取元素标签的内容
System.out.println(childNode2.getTextContent());
}
//===============方法2==========================
if(childNode2 instanceof Element)
{//...........}
//=============================================
}
}
}
}
//添加
public static void demo03() throws Exception{
//获取doument对象-dom方式
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//获取根元素
Element rootElement=document.getDocumentElement();
//创建新元素,不要以为是rootElement创建的哦,Document创建。用appendchild()关联
Element bookElement=document.createElement("book");
//为元素创建id属性
bookElement.setAttribute("id", "b0003");
//为book元素创建子元素
Element newTitleElement=document.createElement("title");
newTitleElement.setTextContent("Flex开发");
Element newPriceElement=document.createElement("price");
newPriceElement.setTextContent("98");
Element newAuthorElement=document.createElement("author");
newAuthorElement.setTextContent("胡玉勉");
bookElement.appendChild(newTitleElement);
bookElement.appendChild(newPriceElement);
bookElement.appendChild(newAuthorElement);
//将book加入到根节点rootElement下
rootElement.appendChild(bookElement);
//=======将创建好了新元素的document更新到原来的文件里=====
//运用javax.transform技术
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement,用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
//删除-通过父节点删除子节点
@SuppressWarnings("unused")
public static void demo04() throws Exception{
//获取document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//获取根元素
Element rootElement=document.getDocumentElement();
//删除某一个book元素,比方id为“b003”
//1.获取id为“b003”的元素
NodeList allBookElement = document.getElementsByTagName("book");
for(int m = 0 ; m < allBookElement.getLength() ; m ++){
Element bookElement = (Element) allBookElement.item(m);
String id = bookElement.getAttribute("id");
if("b0003".equals(id)){
//注意删除节点的时候,应遵循由自己找到父节点。然后通过父节点删除
bookElement.getParentNode().removeChild(bookElement);
}
}
//=======将删除了的document更新到原来的文件里=====
//运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement。用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
//改动
@SuppressWarnings("unused")
public static void demo05() throws Exception{
//获取document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
Element rootElement=document.getDocumentElement();
//获取元素进行改动
NodeList bookNodeList=document.getElementsByTagName("book");
//遍历,对id=“b002”的book元素进行改动
for(int i=0;i<bookNodeList.getLength();i++){
Element bookNode=(Element)bookNodeList.item(i);
String id=bookNode.getAttribute("id");
if("b002".equals(id)){
//获取元素的子节点进行改动
NodeList childNodeList=bookNode.getChildNodes();
for(int j=0;j<childNodeList.getLength();j++){
Node bookChildNode=childNodeList.item(j);
System.out.println(bookChildNode.getNodeName());
bookChildNode.setTextContent("改动了节点的文本内容");
System.out.println(bookChildNode.getTextContent());
}
}
}
//记住别忘了回写到xml文件里
//=======将删除了的document更新到原来的文件里=====
//运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement,用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
}
xml解析-jaxp之dom解析的更多相关文章
- 2.1 使用JAXP 对 xml文档进行DOM解析
//使用 jaxp 对xml文档进行dom解析 public class Demo2 { //必要步骤 @Test public void test() throws Exception { //1. ...
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- XML案例(使用JAXP进行DOM解析)
1.book.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- Android笔记(四十五) Android中的数据存储——XML(一)DOM解析器
DOM解析XML在j2ee开发中比较常见,在Dom解析的过程中,是先把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式显然是一种比较消耗内存的方式,对于像手机这 ...
- 使用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& ...
- Javaweb学习笔记——(六)——————xml中jaxp两种解析方式和dom4j运用
1.xml的scheam约束 dtd的语法:<!ElEMENT 元素名称 约束> **schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用 ...
- XML解析-Dom4j的DOM解析方式更新XML
Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...
随机推荐
- Python基础 (上)
参考:菜鸟教程 Python用途 目录 一.数据类型 二.运算符 三.条件和循环控制语句 四.函数 五.模块 六.输入与输出 一.数据类型 string.list和tuple都属于sequenc ...
- 启动Kafka
启动zookeeper 使用命令查看zookeeper是否启动成功: 启动kafka Brokerr 使用命令查看kafka Broker是否启动更成功 在kafka中创建topic 'test' b ...
- Android应用捕获全局异常自定义处理
[2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_s ...
- 一步步带你做vue后台管理框架
1.登录 (1). 一步步带你做vue后台管理框架(三)——登录功能 2.权限控制 (1) 基于Vue2.0实现后台系统权限控制 (2) 手摸手,带你用vue撸后台 系列二(登录权限篇)
- 页面跳转问题-button 确定提交按钮
form和ajax不可一起用了,button标签默认是用的form表单,所以导致跳转有问题,form不能和ajax一起用的,切记
- Oracle使用sys登录时报错ORA-28009解决方法
情况一:使用sqlplus登录: 正常输入用户名的口令,就会报错,因为SYS是在数据库之外的超级管理员,所以我们在登录的时候 要在输入口令:口令+as sysdba(比如:123456 as sysd ...
- 【转】使用Python的Requests库进行web接口测试
原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...
- [Modelsim] 仿真的基本操作
切换路径,建立库并编译所有源文件之后, 键入命令: vopt +acc topmodulename -o top vsim top 其中topmodulename是顶层模块的名称.
- LaTex 2
LaTex 入门 此时是否安装成功 如果安装成功了LaTeX, 那么在计算机上会多出来LaTeX的编译器, LaTex Live 安装包在计算机上安装了多个不同的编译器, 有latex, xelate ...
- 我们能用canvas做什么?
什么是Canvas? Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像.Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度.JavaScript代码可以访问该地区,通过 ...