笔记目录:


1.了解XML解析

2.使用DOM读取和维护XML数据

3.使用DOM4J读取和维护XML数据


1.DOM解析XML的步骤

2.使用DOM解析XML时主要使用的对象

XML中节点有三种:1.标签节点  2.属性节点  3.文本节点

Node可以是三种节点任意一种,Element是标签节点对象

2.1 Node对象

2.2 NodeList对象

2.3 Document对象

2.4 Element对象

注意: 1.更多API信息,请查阅JDK API

          2.获取子对象注意事项

3.DOM解析XML实例

代码:

public class DOM解析XML {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {//创建解析器工厂对象DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//获得解析对象DocumentBuilder builder=factory.newDocumentBuilder();//加载要解析的XML文件Document doc=builder.parse(new File("手机信息.xml"));//构建DOM树//操作DOM树: 读取,修改,添加,删除..//getLength():获得节点个数//Item():获得节点集合中的第N个节点//getElementsByTagName(): 根据标签名获得指定的标签[子标签,父标签]//getAttribute((): 获得当前标签的指定属性的值//getTextContent(): 获得当前标签的文本内容NodeList brands=doc.getElementsByTagName("Brand");//根据标签名获得标签节点for (int i = 0; i < brands.getLength(); i++) {//节点: 标签,属性节点,文本节点Element brand=(Element) brands.item(i);//Brand属于标签节点String name=brand.getAttribute("name");//el.getChildNodes();NodeList types=brand.getElementsByTagName("Type");for(int j = 0; j < types.getLength(); j++) {Element type=(Element) types.item(j);//Node向下转型为ElementString typeName=type.getAttribute("name");//获得type标签的name属性值String price=type.getTextContent();//获得当前标签的文本内容System.out.println("手机名:"+name+" 型号:"+typeName+" 价格:"+price);}}}
}

XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo><Brand name="华为"><Type name="P90">5000元</Type></Brand><Brand name="苹果"><Type name="iPhone Z">18000元</Type><Type name="iPhone ZL">12000元</Type></Brand>
</PhoneInfo>

总结:使用DOM读取XML其实是对Document、NodeList、Node、Element 等几个对象的灵活运用

4.使用DOM维护XML数据(增删改)

4.1 保存Document内容到XML文件的步骤

4.2 常用方法

方法名 描述
Document元素.createElement(标签名) 创建一个标签元素(一般会使用一个Element对象接收,方便操作元素)
Element元素.setAttribute("属性名","值") 设置标签元素的属性名和值
Element元素.appendChild(Element元素) 添加元素间的嵌套父子关系( 父元素.appendChild(子元素) )
Element元素.removeChild(Element元素)

删除元素(元素不能自己删除自己,需要用要删除元素的父元素来删除要删除的元素)

要删除元素的父元素Element对象.removeChild(要删除的Element元素)

Element元素.removeAttribute("属性名") 删除Element元素对应属性名的属性
Element元素.getParentNode() 获取元素的父元素
Element元素.setTextContent("值")/getTextContent("值") 获取/设置 元素的值

4.3 思路

增加标签:使用Document树对象创建标签元素,把创建的标签元素添加到对用的Element元素下,建立其嵌套父子关系

删除标签:标签不能自己删除自己,需要被删除的标签获取其父标签元素,用父标签元素来删除其子元素(自己)

修改:暂无

4.4 实际操作

代码:

public class DOM解析XML {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {//创建解析器工厂对象DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//获得解析对象DocumentBuilder builder=factory.newDocumentBuilder();//加载要解析的XML文件Document doc=builder.parse(new File("手机信息.xml"));//构建DOM树//新增节点: 标签节点,属性节点,文本节点Element newBrand=doc.createElement("Brand");//<Brand></Brand>newBrand.setAttribute("name", "小米");//<Brand name="小米"></Brand>Element newType=doc.createElement("Type");//<Type></Type>newType.setAttribute("name", "Mi10");//<Type name="Mi10"></Type>newType.setTextContent("2999元");//<Type name="Mi10">2999元</Type>//将子标签添加到父标签中newBrand.appendChild(newType);//<Brand name="小米"><Type name="Mi10">2999元</Type></Brand>//修改节点: 属性,文本newType.setAttribute("name","mi11");newType.setTextContent("1999元");//删除节点: 标签节点,属性节点,文本节点newType.removeAttribute("name");newType.setTextContent("");//文本默认为""//newType.getParentNode().removeChild(newType);//删除当前节点Node parentNode=newType.getParentNode();parentNode.removeChild(newType);//添加节点到DOM树doc.getElementsByTagName("PhoneInfo").item(0).appendChild(newBrand);//存储XML信息DOMSource domSource=new DOMSource(doc);//设置DOM信息Result rs=new StreamResult(new FileOutputStream(new File("新的手机信息.xml")));//信息存储位置//格式转换对象//创建格式转换工厂对象TransformerFactory ttf=TransformerFactory.newInstance();//获得格式转换对象Transformer transformer=ttf.newTransformer();//设置转换格式transformer.setOutputProperty(OutputKeys.VERSION, "1.0");transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//转换: 将DOM信息,转到磁盘文件中transformer.transform(domSource, rs);}
}

XML文件:

<!-- 手机信息.XML -->
<?xml version="1.0" encoding="UTF-8" ?>
<PhoneInfo><Brand name="华为"><Type name="P90">5000元</Type></Brand><Brand name="苹果"><Type name="iPhone Z">18000元</Type><Type name="iPhone ZL">12000元</Type></Brand>
</PhoneInfo><!-- 新的手机信息.XML -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?><PhoneInfo><Brand name="华为"><Type name="P90">5000元</Type></Brand><Brand name="苹果"><Type name="iPhone Z">18000元</Type><Type name="iPhone ZL">12000元</Type></Brand>
<Brand name="小米"/></PhoneInfo>

使用DOM读取和维护XML数据相关推荐

  1. 使用DOM4J读取和维护XML数据

    笔记目录: 1.了解XML解析 2.使用DOM读取和维护XML数据 3.使用DOM4J读取和维护XML数据 1.DOM4J介绍 2. DOM4J读写机制 3. DOM4J常用API DOM4J的主要接 ...

  2. 能源系统建模:python读取GCAM的xml数据文件

    点赞发Nature 关注中Science GCAM通过gcamdata由csv文件生成xml文件,在csv文件中的寿命曲线,成本曲线等会形成xml文件中的每个时间的具体数据.有时需要将这些具体的数据导 ...

  3. 简单使用SAXReader解析xml数据

    之前的工作中,一直是使用json格式的数据进行数据传输.很少会接触到xml格式的数据.不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml.不 ...

  4. 【Qt】DOM读取XML文档

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. XML文档示例 04. DOM读取XML文档内容 05. 预留 06. 附录 01. 概述 DOM(Document Ob ...

  5. XML数据读取方式性能比较(一)

    几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较过这些方式各有哪些特点或优劣.正好看到网 ...

  6. [Qt教程] 第27篇 XML(一)使用DOM读取XML文档

    [Qt教程] 第27篇 XML(一)使用DOM读取XML文档 楼主  发表于 2013-5-21 21:14:28 | 查看: 1001| 回复: 14 使用DOM读取XML文档 版权声明 该文章原创 ...

  7. 用 PHP 读取和编写 XML DOM

    简单代码: <?php $str = file_get_contents('test.xml'); //如果不是utf8的编码 //$xml = simplexml_load_string(ic ...

  8. java编写大数据分析模型_如何用Java(DOM分析器)编写XML文件

    java编写大数据分析模型 Earlier we learned how to read XML file and how to edit XML file in java using DOM Par ...

  9. delphi读取xml中的内容property name传递参数_python3 Json和XML数据解析

    一.Json数据解析 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进行 ...

最新文章

  1. dis的前缀单词有哪些_玩转英语词汇--词汇积累策略之前缀dis
  2. 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
  3. 我问占小狼到底什么是面向对象编程?他转头就走。
  4. 《低功耗蓝牙开发权威指南》——第2章基本概念
  5. scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!
  6. 柔性体没有应变_柔性应变和压力传感器
  7. aes key长度_AES加密(1): 基本AES算法
  8. 数据结构思维 第十三章 二叉搜索树
  9. Maven学习(四)-----Maven中央存储库
  10. zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
  11. Hexo + github 打造个人博客
  12. 【Java】反射 Reflection
  13. 最强大脑世界记忆大师运用的记忆方法
  14. 一网打尽!炫酷枪火打击视频+图文+源码!哔哔哔......
  15. 分享一款国产并口PSRAM存储芯片EMI164NA16LM
  16. 国网项目汇总(ECP)
  17. spring(春天)
  18. linux虚拟机怎么联网
  19. 安装VMware Tools显示灰色正确解决办法
  20. kubernetes学习(4)---Nginx搭建简单的文件服务器

热门文章

  1. 回溯算法(八皇后问题)
  2. 中石油oj 2654: 序列合并
  3. python 生成pdf收据_python如何与以太坊交互并将区块链信息写入SQLite
  4. STM32 之五 Core Coupled Memory(CCM)内存
  5. mysql not in语句_Mysql学习经验总结【2】
  6. ubuntu下安装Qt的过程以及遇到的问题和解决方案
  7. Ubuntu 安装简单samba
  8. 段错误 php,php扩展出现段错误怎么办
  9. atomic原子类实现机制_Java并发包-atomic包-让您彻底掌握AtomicInteger源码
  10. php mysql结果集转数组,几种mysql查询结果转换为PHP数组的方法