- XML
- 1.简介
- 2.语法
- 3.XML的各种解析技术
- 4.Dom4j解析技术
是可扩展的标记性语言 (可扩展:直接定义标签)
xml
主要作用:
-
用来保存数据 ,而且这些数据具有自我描述性
-
还可以作为项目或模板的的配置文件
-
作为网络传输数据的格式 (这个用的不多了,现在以
JSON
为主)
2.语法
-
文档声明
-
元素(标签)
指的是从(且包括)开始标签直到(且包括)结束标签的部分,和html差不多。标签命名可有下划线。
-
xml属性,提供有关元素的额外信息,属性值必须被引号包围
-
xml注释,和html一样
-
文本区域 (CDATA区)
CDATA语法可以告诉解析器CDATA里面的内容只是存文本,不需要xml语法解析。
>我是纯文本 ]]>
xml对大小写敏感,标签必须闭合,xml文档必须有根元素(根元素:没有父标签的顶级元素,而且是一个才行)
<books>
<book sn="Sn1231314">
<name>时间简史name>
<author>霍金author>
<price>75price>
book>
<book sn="Sn1215151">
<name>活着name>
<author>余华author>
<price>50price>
book>
books>
3.XML的各种解析技术
⭐⭐⭐
各种解析技术的介绍:不管是html
还是xml
文件它们都是标记性文档,都可以使用w3c
组织指定的dom技术来解析,document
对象表示整个文档,不仅是html
,xml
也是。
早期JDK为我们提供了两种解析技术:DOM和SAX (现在都已经过时了)
DOM
:根据W3C指定的规则,几乎所有的编程语言都对这个解析技术做了实现。
SAX
:在JDK5对dom技术进行了升级即SAX(Simple API for XML),SAX解析,它跟W3C制定的规则不太一样,它是类似事件机制通过回调告诉用户当前正在解析的内容,它是一行一行的读取xml文件进行解析的,不会创建大量的dom对象,所以在内存上性能上都优于DOM解析技术。
第三方的解析:
-
jdom
: 在dom/sax基础上进行了封装 -
dom4j
:又对jdom进行了封装 (下面讲)⭐ -
pull
: 主要用于安卓手机开发,是在跟sax非常类似都是事件机制解析xml文件
4.Dom4j解析技术
Dom4j解析技术不是sun/oracle
公司,属于第三方的技术,所以要去dom4j
官网下载jar包
官网:dom4j.github.io
在Java中解析上面的例子:
- 创建SAX输入流,读取xml文件,产生document对象
- 创建document对象
- 通过document对象获取跟元素
- 通过根元素获取book标签对象,遍历处理每个book标签转化为Book类
private static void test01() {
// 1.创建SAX输入流,读取xml文件,产生document对象
SAXReader saxReader = new SAXReader();
try {
// 2.创建document对象
Document document = saxReader.read("xml/books.xml");
//Junit测试中,相对路径的从当前模板为开始算
// 3.通过document对象获取跟元素
Element rootElement = document.getRootElement();
// 4.通过根元素获取book标签对象,遍历处理每个book标签转化为Book类
List<Element> books = rootElement.elements("book");
// element和elements都是通过标签名查找子元素
for (Element book : books) {
//System.out.println(book.asXML()); // asXML()把标签对象转化为标签字符串
Element name = book.element("name");
String nameText = name.getText(); //获取标签中的文本内容
String priceText = book.elementText("price"); //直接获取标签中的文本内容
String authorText = book.elementText("author");
//获取属性
String snVal = book.attributeValue("sn");
System.out.println(new Book(snVal, nameText,
authorText, new BigDecimal(priceText))); //输出Book类对象
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)