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解析的更多相关文章

  1. 2.1 使用JAXP 对 xml文档进行DOM解析

    //使用 jaxp 对xml文档进行dom解析 public class Demo2 { //必要步骤 @Test public void test() throws Exception { //1. ...

  2. 使用JAXP对xml文档进行DOM解析基础

    XML解析方式分为两种:dom和sax         dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式.       sax: ...

  3. XML案例(使用JAXP进行DOM解析)

    1.book.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...

  4. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  5. Android笔记(四十五) Android中的数据存储——XML(一)DOM解析器

    DOM解析XML在j2ee开发中比较常见,在Dom解析的过程中,是先把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式显然是一种比较消耗内存的方式,对于像手机这 ...

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

    import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers. ...

  7. javaweb学习总结十一(JAXP对XML文档进行DOM解析)

    一:将内存中写好的xml文件读取到硬盘上 二:DOM方式对xml文件进行增删改查 1:添加节点(默认是在最后的子节点后面添加) @Test // 向元素中添加节点<version>1.0& ...

  8. Javaweb学习笔记——(六)——————xml中jaxp两种解析方式和dom4j运用

    1.xml的scheam约束 dtd的语法:<!ElEMENT 元素名称 约束> **schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用 ...

  9. XML解析-Dom4j的DOM解析方式更新XML

    Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...

随机推荐

  1. PIE SDK Pansharp融合

    1.算法功能简介 Pansharp 融合是基于最小二乘逼近法来计算多光谱影像和全色影像之间灰度值关系,具体过程是利用最小方差技术对参与融合的波段灰度值进行最佳匹配,以减少融合后的颜色偏差.该融合方法不 ...

  2. linux 运维基础之 禁止 ping

    ping命令不要小瞧呀,小伙子!!! 听过死亡之ping不? 语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l ...

  3. (Frontend Newbie)Web三要素(三)

    上一篇简单介绍了Web三要素中的层叠样式表,本篇主要介绍三要素中最后一个,也是最难掌握的一个-----JavaScript. JavaScript 老规矩不能破,先简要交代 JavaScript 的历 ...

  4. unity项目架构

    Unity 游戏框架搭建 (一) 概述Unity 游戏框架搭建 (二) 单例的模板Unity 游戏框架搭建 (三) MonoBehaviour单例的模板Unity 游戏框架搭建 (四) 简易有限状态机 ...

  5. ife task0003学习笔记(二):JavaScript原型

    function aaa(){} aaa.prototype.bbb=function(){} var obj1=new aaa() var obj2=new aaa() obj1和obj2都有一个属 ...

  6. 深入理解JavaScript系列(36):设计模式之中介者模式

    介绍 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要内容来自:http://www ...

  7. Entity FrameWork利用Database.SqlQuery<T>执行存储过程并返回参数

    目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的结果集. EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. 虽然可以正常导 ...

  8. poi学习

    需要节点  <dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</a ...

  9. linux里终端安转视频播放器的操作及显示

    [enilu@enilu ~]$ mplayerbash: mplayer: command not found[enilu@enilu ~]$ yum list | grep mplayer^C^C ...

  10. android,getExternalStorageDirectory()和getExternalFilesDir()的区别

    转载地址:https://blog.csdn.net/nugongahou110/article/details/48154859 之前看到一位网友的吐槽:当我把手机连接到电脑上时,在SD卡根目录看到 ...