一、XML的简介
XML文件的简单使用:
<?xml version="1.0" encoding="UTF-8"?>
<!--
<?xml version="1.0" encoding="UTF-8"?>
xml文件声明
version是版本号
encoding是xml文件的编码方式
-->
注意事项:
1.在xml文件中,必须要有一个根元素
2.xml的元素必须闭合
3.xml的属性值必须使用双引号引起来
4.在xml中特殊字符要显示,必须使用特殊字符的符号
XML的常见作用:
一:保存数据
二:它可以作为工程或者框架。或者模块的配置文件
三:它可以做为网络数据传输的格式
Json
Json是另一种数据交换格式.
它是现在主流的数据交换格式
1.同时数据,使用json格式来表示。它的数据量比xml小
2.它的解析速度比解析xml格式要快
XML文件的解析
早期JDK为我们提供了两种xml解析技术Dom和Sax。
dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java对dom技术解析标记也做了实现。
早期sun公司就制定的 dom 技术。它需要把整个xml文件一下子加载到内存对象中。然后创建大量的dom内 存对象,然后通过getElementById、getElementsByName 、getElementsByTagName 等方法一层一层遍历解析。
dom解析:性能和内存消耗都非常差。于是sun公司在JDK5版本对 dom解析技术进行升级:SAX( Simple API for XML )
SAX解析,它跟W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
它是一行一行的读取xml文件进行解析的。不会创建大量的dom对象。所以它在解析xml的时候,在内存的使用和性能上都优于Dom解析。
二、XML使用
dom4j 编程步骤:
- 先读取xml文件,生成document对象
- 通过document对象获取根元素对象。document.getRootElement()
- 通过根元素对象.elements( 标签名 ) 查找子元素标签对象集合 elements(标签名)
- 一层一层遍历到你想要操作的标签对象。获取标签中的文本使用.getText()方法。修改setText()方法修改。
- 保存document对象到硬盘文件中。
遍历标签,获取标签中的内容及属性
public void readXml() throws DocumentException{
// 需要分四步操作:
// 第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象
SAXReader reader= new SAXReader();
Document document = reader.read("src/books.xml");
// 第二步,通过Document对象。拿到XML的根元素对象
Element root = document.getRootElement();
// asXML是把元素对象转换成为xml字符串
// System.out.println(root.asXML());
// 第三步,通过根元素对象。获取所有的book 标签对象 elements(标签名)
List<Element> bookElements = root.elements("book");
for (Element book : bookElements) {
// 第四步,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容
// 获取book标签中name的标签的文本内容
Element nameElement = book.element("name");
String nameText = nameElement.getText();
// 获取book标签中price的标签的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
// 获取属性的值
String snValue = book.attributeValue("sn");
}
}
增加元素和属性
增加一个<the best = "最高级" >比较级</the> 元素。
public void addXML() throws Exception {
//同上
SAXReader read =new SAXReader();
Document document = read.read("src/books.xml");
//到第2个book标签的位置
Element secondbook = (Element) document.getRootElement().elements("book").get(1);
//增加一个the标签
Element girlElement = secondbook.addElement("the");
/*
此时的效果
<book sn="123457">
<name>水浒传</name>
<price>10</price>
<auther>李四</auther>
<the/>
</book>
*/
girlElement.setText("比较级");
/*
此时的效果
<book sn="123457">
<name>水浒传</name>
<price>10</price>
<auther>李四</auther>
<girl>比较级</girl></book>
*/
girlElement.addAttribute("best", "最高级");
/*
此时的效果
<book sn="123457">
<name>水浒传</name>
<price>10</price>
<auther>李四</auther>
<the best="最高级">比较级</the>
</book>
*/
System.out.println(document.asXML());
/*
几种常见的写出到本地磁盘的操作
*/
// FileWriter out = new FileWriter("foo.xml");
// document.write(out);
// out.close();
/*
漂亮的写出
会自动排版,适用于写出标准代码时
*/
// Pretty print the document to System.out
// OutputFormat format = OutputFormat.createPrettyPrint();
// XMLWriter writer = new XMLWriter( new FileWriter("output-1.xml"), format );
// writer.write( document );
// writer.close();
/*
丑陋的写出
写出时没有格式,是一串紧密的数字
*/
// Compact format to System.out
// OutputFormat format = OutputFormat.createCompactFormat();
// XMLWriter writer = new XMLWriter( new FileWriter("output-2.xml"), format );
// writer.write(document);
// writer.close();
}