XML文件
XML文件
可扩展标记性语言
作用
- 用来保存数据,而且这些数据具有自我描述性
- 可以做为项目或者模块的配置文件
- 可以做为网络传输数据的格式(现在JSON为主)
XML语法
-
文档声明
<?xml version="1.0" encoding="utf-8" ?>
- version:表示xml的版本
- encoding:表示xml文件本身的编码
-
元素(标签)
元素是指从开始标签到结束标签的内容(包括标签)
- 命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能包含空格
- xml中的元素(标签)分成单标签和双标签
- 单标签
<标签名属性=”值” 属性=”值” ...... />
- 双标签
<标签名属性=”值” 属性=”值” ......>文本数据或子标签</标签名>
- 单标签
- 命名规则:
-
xml属性
- 属性可以提供元素的额外信息
- 一个标签上可以书写多个属性。每个属性的值必须使用引号引起来
-
xml注释
<!-- xml 注释-->
-
文本区域(CDATA区)
CDATA语法可以告诉xml解析器,里面的文本内容只是纯文本,不需要xml语法解析
-
所有XML元素都须有关闭标签(也就是闭合)
-
XML标签对大小写敏感
-
XML必须正确地嵌套
-
XML文档必须有根元素
根元素是没有父标签的顶级元素,而且是唯一一个才可以
<?xml version="1.0" encoding="utf-8" ?>
<books><!--books 表示多本图书信息-->
<book sn="SN123456"><!--book 表示一本图书信息-->
<name>红楼梦</name>
<author>
曹雪芹
<![CDATA[
<<<<<<<一个为伟大的作家
]]>
</author>
<price>50</price>
</book>
</books>
使用dom4j解析XML
获取document对象
-
添加dom4j的jar包,并将jar包添加到类路径
-
准备好需要被解析的xml文件
使用的xml文件:
<?xml version="1.0" encoding="UTF-8"?> <books> <book sn="SN12341232"> <name>辟邪剑谱</name> <price>9.9</price> <author>班主任</author> </book> <book sn="SN12341231"> <name>葵花宝典</name> <price>99.99</price> <author>班长</author> </book> </books>
-
解析获取Document对象的代码
创建SaxReader输入流对象,用于读取xml文件,并创建Document对象
//创建一个SAXReader输入流,读取xml配置文件,生成Document对象 SAXReader saxReader = new SAXReader(); Document document = saxReader.read("src/test.xml");
遍历标签,获取所有标签中的内容
- 通过Document对象获取XML的根元素对象
- 通过根元素获取所有的根元素标签对象
- element()和elements()都是通过标签名查找子元素
- asXML():把标签对象转换为标签字符串
- getText():可以获取标签中的文本内容
- elementText():可以直接获取指定标签名的文本内容
- 遍历处理每个根标签转化为对应的类
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/test.xml");
Element rootElement = document.getRootElement();
// System.out.println(rootElement);//org.dom4j.tree.DefaultElement@148080bb [Element: <books attributes: []/>]
List<Element> books = rootElement.elements("book");
for(Element e : books){
//asXML():把标签对象转换为标签字符串
// System.out.println(e.asXML());
Element name = e.element("name");
// System.out.println(name.asXML());
//getText():可以获取标签中的文本内容
String nameText = name.getText();
//elementText():可以直接获取指定标签名的文本内容
String priceText = e.elementText("price");
// System.out.println(priceText);
String authorText = e.elementText("author");
// System.out.println(authorText);
//attributeValue():获取标签的属性
String sn = e.attributeValue("sn");
// System.out.println(sn);
System.out.println(new test(sn, nameText, Double.parseDouble(priceText), authorText));
}