使用DOM读取和维护XML数据
笔记目录:
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数据相关推荐
- 使用DOM4J读取和维护XML数据
笔记目录: 1.了解XML解析 2.使用DOM读取和维护XML数据 3.使用DOM4J读取和维护XML数据 1.DOM4J介绍 2. DOM4J读写机制 3. DOM4J常用API DOM4J的主要接 ...
- 能源系统建模:python读取GCAM的xml数据文件
点赞发Nature 关注中Science GCAM通过gcamdata由csv文件生成xml文件,在csv文件中的寿命曲线,成本曲线等会形成xml文件中的每个时间的具体数据.有时需要将这些具体的数据导 ...
- 简单使用SAXReader解析xml数据
之前的工作中,一直是使用json格式的数据进行数据传输.很少会接触到xml格式的数据.不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml.不 ...
- 【Qt】DOM读取XML文档
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. XML文档示例 04. DOM读取XML文档内容 05. 预留 06. 附录 01. 概述 DOM(Document Ob ...
- XML数据读取方式性能比较(一)
几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较过这些方式各有哪些特点或优劣.正好看到网 ...
- [Qt教程] 第27篇 XML(一)使用DOM读取XML文档
[Qt教程] 第27篇 XML(一)使用DOM读取XML文档 楼主 发表于 2013-5-21 21:14:28 | 查看: 1001| 回复: 14 使用DOM读取XML文档 版权声明 该文章原创 ...
- 用 PHP 读取和编写 XML DOM
简单代码: <?php $str = file_get_contents('test.xml'); //如果不是utf8的编码 //$xml = simplexml_load_string(ic ...
- java编写大数据分析模型_如何用Java(DOM分析器)编写XML文件
java编写大数据分析模型 Earlier we learned how to read XML file and how to edit XML file in java using DOM Par ...
- delphi读取xml中的内容property name传递参数_python3 Json和XML数据解析
一.Json数据解析 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码. json.loads(): 对数据进行 ...
最新文章
- dis的前缀单词有哪些_玩转英语词汇--词汇积累策略之前缀dis
- 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
- 我问占小狼到底什么是面向对象编程?他转头就走。
- 《低功耗蓝牙开发权威指南》——第2章基本概念
- scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!
- 柔性体没有应变_柔性应变和压力传感器
- aes key长度_AES加密(1): 基本AES算法
- 数据结构思维 第十三章 二叉搜索树
- Maven学习(四)-----Maven中央存储库
- zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
- Hexo + github 打造个人博客
- 【Java】反射 Reflection
- 最强大脑世界记忆大师运用的记忆方法
- 一网打尽!炫酷枪火打击视频+图文+源码!哔哔哔......
- 分享一款国产并口PSRAM存储芯片EMI164NA16LM
- 国网项目汇总(ECP)
- spring(春天)
- linux虚拟机怎么联网
- 安装VMware Tools显示灰色正确解决办法
- kubernetes学习(4)---Nginx搭建简单的文件服务器
热门文章
- 回溯算法(八皇后问题)
- 中石油oj 2654: 序列合并
- python 生成pdf收据_python如何与以太坊交互并将区块链信息写入SQLite
- STM32 之五 Core Coupled Memory(CCM)内存
- mysql not in语句_Mysql学习经验总结【2】
- ubuntu下安装Qt的过程以及遇到的问题和解决方案
- Ubuntu 安装简单samba
- 段错误 php,php扩展出现段错误怎么办
- atomic原子类实现机制_Java并发包-atomic包-让您彻底掌握AtomicInteger源码
- php mysql结果集转数组,几种mysql查询结果转换为PHP数组的方法