Java中的XML
XML是一种可扩展的标记语言,可扩展就是<>内的东西可以自己定义,可以随便写。标记语言就是加了<>符号的 。HTML是超文本标记语言,不可以拓展,因为你写个<p> 浏览器知道这个是段落,你写个<shuyunquan>浏览器就不认识了,所以不可拓展
讲讲xml的书写格式:
1.开头固定
2.只能有一个根元素
3.没了
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<student>
<name>许嵩</name>
<age>32</age>
</student>
<student>
<name>蜀云泉</name>
<age>23</age>
</student>
</Students>
我写了一个,开头的第一行是固定的,当然也可以多写。这个是告诉别人,我是xml文件
下面来介绍一下Java是怎么操作xml的,也可以说是怎么操作DOM的,以前一直听说DOM,Dom就是不知道是什么,原来DOM就是内存中的一个树形结构的数据称谓,xml的数据就是树形结构的,在内存中就是DOM
这篇文章只是介绍一下,具体操作处理XML文件还是要使用Dom4j,看这篇文章
一、Java读取xml
比如上面的xml文件,我想获取第二个student元素的name里面的文本,操作如下:
private File f=new File("F:/Study Java/ch1helloworld/src/main/java/com/StadyJava/day2/xmldemo.xml"); public void testDocument() throws ParserConfigurationException, IOException, SAXException {
//1.
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.
DocumentBuilder builder=factory.newDocumentBuilder();
//3 经过这3步获取到了文档
Document doc=builder.parse(f); //上面的三步可以写成这样
//Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); //已经获取了文档对象,现在获取xml的根元素
Element root=doc.getDocumentElement(); //获取第二个student 因为返回的是父类型Node,所以需要强转一下
Element student2=(Element) root.getElementsByTagName("student").item(1); //获取第二个student元素的子元素name
Element name2=(Element) student2.getElementsByTagName("name").item(0); //获取name元素的文本内容
System.out.println(name2.getTextContent()); }
1.获取xml文件
2.获取根元素students
3.获取根元素下面的第二个student元素
4.获取第二个student元素的name元素
5.获取name的文本内容
二、Java更改xml
这里我们准备把许嵩的年龄改为18
其实操作和上面的读取差不多,只不过多了一个从内存更新到磁盘的步骤
public void setxml() throws Exception { //获取文档对象
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); //已经获取了文档对象,现在获取xml的根元素
Element root=doc.getDocumentElement(); //获取第一个student 因为返回的是父类型Node,所以需要强转一下
Element student1=(Element) root.getElementsByTagName("student").item(0); //获取第一个student元素的子元素age
Element age1=(Element) student1.getElementsByTagName("age").item(0); //更新age元素的文本内容,这里仅仅的更新了内存中的DOM,还要更新到磁盘的xml源文件
age1.setTextContent("18"); //同步内存中的数据到磁盘中的源文件
Transformer trans=TransformerFactory.newInstance().newTransformer();
Source xmlSource=new DOMSource(doc); //内存中的DOM
Result outputTarget=new StreamResult(f); //磁盘中的xml文件
trans.transform(xmlSource,outputTarget);//从内存更新到磁盘 }
三、Java插入xml数据
要插入新数据,要创建元素,要给元素赋值,要给元素之间绑定关系
public void Insertxml() throws Exception{
//获取文档对象
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f); //已经获取了文档对象,现在获取xml的根元素
Element root=doc.getDocumentElement(); //创建一个student元素以及子元素,注意,子元素和student之间还需要绑定
Element student=doc.createElement("student");
Element name=doc.createElement("name");
Element age=doc.createElement("age");
//给student元素赋值
name.setTextContent("林俊杰");
age.setTextContent("33");
//把子元素和student之间进行绑定
student.appendChild(name);
student.appendChild(age);
//把student元素和DOM的root根节点绑定起来
root.appendChild(student); //更新
Transformer trans=TransformerFactory.newInstance().newTransformer();
Source xmlSource=new DOMSource(doc); //内存中的DOM
Result outputTarget=new StreamResult(f); //磁盘中的xml文件
trans.transform(xmlSource,outputTarget);//从内存更新到磁盘
}
就是这样,代码更改的就中间那一段。新增数据后是没有空格格式的,所以数据都在一行,看起来不美观
四、Java删除xml元素
还是,先操作DOM,然后再更新到磁盘
public void deletexml() throws Exception {
//获取文档对象
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
//已经获取了文档对象,现在获取xml的根元素
Element root=doc.getDocumentElement();
//获取要删除的元素,记得强转
Element student=(Element) root.getElementsByTagName("student").item(2);
//删除
root.removeChild(student);
//同步操作
Transformer trans=TransformerFactory.newInstance().newTransformer();
Source xmlSource=new DOMSource(doc); //内存中的DOM
Result outputTarget=new StreamResult(f); //磁盘中的xml文件
trans.transform(xmlSource,outputTarget);//从内存更新到磁盘 }
Java中的XML的更多相关文章
- java中拼写xml
本文为博主原创,未经博主允许,不得转载: xml具有强大的功能,在很多地方都会用的到.比如在通信的时候,通过xml进行消息的发送和交互. 在项目中有很多拼写xml的地方,进行一个简单的总结. 先举例如 ...
- Java中的Xml配置文件(新手)
Java中的Xml配置文件,本文是转发转发转发!重要的事情说三遍 一:概念 1.XML Extensible markup Language 可拓展标记语言 2.功能:存储数据(配置文件,在网络中传 ...
- java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- java 中解析xml的技术
最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表 ...
- Java中解析XML的四种方法
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...
- java中调用xml的方法:DocumentBuilderFactory
具体的使用方法如下: (1)得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); (2 ...
- Java中读取xml方法
package zaxiang; import java.io.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parser ...
- Java中的XML操作
1.DOM方式解析(读取)XML文件 待解析(读取)的XML文件,直接放在项目根目录下即可 <?xml version="1.0" encoding="UTF-8& ...
- [j2ee]java中的xml操作
一.XML简单介绍 xml是可扩展标记语言,主要用来标记数据.定义数据类型,很适合万维网传输. xml特点: xml是一种标记语言.非常类似HTML xml的设计宗旨是数据传输,而不是显示数 ...
随机推荐
- Yahoo Programming Contest 2019 补题记录(DEF)
D - Ears 题目链接:D - Ears 大意:你在一个\(0-L\)的数轴上行走,从整数格出发,在整数格结束,可以在整数格转弯.每当你经过坐标为\(i-0.5\)的位置时(\(i\)是整数),在 ...
- Mysql 函数大全- 5.6 中文解释函数参考
mysql 函数大全 5.6 函数参考 5.6函数参考 (只翻译部分,细节查看相关英文版) 12.1功能和操作员参考 12.2表达式评估中的类型转换 12.3运营商 12.4控制流功能 12.5 ...
- 微信小程序Dom事件实现
面对微信小程序,可能没有像我们平时使用JQuery那样随心所欲.本篇就是为了解决这个问题. 请合理使用工具! 细节就不说了,直接备份一个实现的案例: wxml <view class=" ...
- Python35安装
wnm系列之python安装 下载网址https://www.python.org/downloads/ 之前就用的3.5.4版本,这次还下这个 安装,我直接选择的install now 默认位置安装 ...
- NOIp 2018 游记
Day0 啥都没做,记了一下 vimrc 和配置,然后搞了一下午的颓. 然后头有点晕乎乎的,早点洗澡去睡觉,在床上想了很多,但还是强制自己大脑放空,早点睡着了. Day1 由于去年的教训,今年我决定先 ...
- Android 获取SD路径,存储空间大小的方法
Android用 Environment.getExternalStorageDirectory() 方法获取 SD 卡的路径 , 卡存储空间大小及已占用空间获取方法 : /* 获取存储卡路径 */ ...
- 【BZOJ4890】[TJOI2017]城市(动态规划)
[BZOJ4890][TJOI2017]城市(动态规划) 题面 BZOJ 洛谷 题解 数据范围都这样了,显然可以暴力枚举断开哪条边. 然后求出两侧直径,暴力在直径上面找到一个点,使得其距离直径两端点的 ...
- [luogu1337][bzoj3680][JSOI2004]平衡点 / 吊打XXX【模拟退火】
题目描述 gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞.这n根绳子有 ...
- 「SCOI2016」背单词 解题报告
「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...
- [NOI2010]超级钢琴(RMQ+堆)
小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负 ...