什么是xml?
xml是可扩展的标记性语言。
xml的作用?
xml的主要作用有:
- 用来保存数据,而且这些数据具有自我描述性
- 它还可以做为项目或者模块的配置文件
- 还可以做为网络传输数据的格式(JSON)。
语法
- 文档声明
- 元素(标签)
- xml属性
- xml注释
- 文本区域( CDATA区)
文档声明
<?xml version="1.0" encoding="utf-8"?>
<books><!--加了s就是多个图书-->
<book sn="31415926">
<name>三体</name>
<author>Hauking</author>
<price>50</price>
</book>
<book sn="4165046">
<name>活着</name>
<author>余华</author>
<price>20</price>
</book>
</books>
元素(标签)
元素就是标签
<name>余华</name>
就是一个标签
XML属性
比如一本书 作者、ISBN、价格
xml 的标签属性和html的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。**每个属性的值必须使用引号引起来。**规则和标签的书写规则一致。
<book sn="343587317401" name="活着" author=”余华“ price=”20“ />
语法规则
其他都和html一样。
注意,必须要有父元素
根元素就是顶级元素, 没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯——个才行。
CDATA
特殊字符也是需要转义符的,但是大量怎么办?转义太麻烦
CDATA语法可以告诉xml解析器,我CDATA 里的文本内容,只是纯文本,不需要 xml语法解析
CDATA格式:
<![CDATA[这里可以把你输入的字符原样显示,不会解析XML ]]>解析技术
不管是html文件还是 xml文件它们都是标记型文档,都可以使用w3c组织制定的dom 技术来解析。
就是把<name >余华</name>
打包成一个document对象
早期JDK为我们提供了两种xml解析技术DOM和sax简介(已经过时,但我们需要知道这两种技术)
dom解析技术是w3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java对dom技术解析标记也做了实现。
sun公司在JDK5版本对dom解析技术进行升级:SAx ( Simple API for XML )
SAX解析,它跟W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。它是一行一行的读取xml文件进行解析的。不会创建大量的 dom对象。
所以它在解析xml 的时候,在内存的使用上。和性能上。都优于Dom解析。
第三方的解析:
- jdom在dom基础上进行了封装
- dom4j又对jdom进行了封装。
- pull主要用在Android手机开发,在跟sax非常类似都是事件机制解析xml文件。
这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件。
实战
解析我们自己写的book XML文件
DOM4j编程步骤
- 第一步:先加载xml文件创建Document对象
- 第二步:通过Document对象拿到根元素对象
- 第三步:通过根元素.elelemts(标签名);可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
- 第四步:找到你想要修改删除的子元素,进行相应在的操作
- 第五步:保存到硬盘上
获得 document对象、获取XML内容
@Test
public void test2 () throws Exception{
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/book.xml");
Element rootElement = document.getRootElement();
List<Element> books = rootElement.elements("book");
for(Element nowbook: books)
{
Element nameElement = nowbook.element("name");
String bookname = nameElement.getText();//间接获取
String priceText = nowbook.elementText("price");//直接获取
System.out.println(bookname);
System.out.println(priceText+"元");
System.out.println("-------------");
}
}catch (Exception e){
e.printStackTrace();
}
}
类似于IO的知识,拿到路径、写入内容。
然后用List<Elemernt>
获取从XML文件拿到的信息
然后遍历,可以有直接、间接获取内容
.asXML() 方法就是把前后的<name></name>
包裹起来
往XML添加元素
则需要new一个document
对象
然后针对于这个对象,先创建根目录
根目录底下又得创建每个单元(比如book)
然后对这个book创建属性、元素内容