xml和dom4J
一、 xml定义:是可扩展的标志性语言,标记性文档,可以使用w3c组织制定的dom技术来解析
二、 作用:
a. 用来保存数据,这些数据具有自我描述性
b. 作为项目模块的配置文件
c. 作为网络传输数据的格式(现在以JSON)为主
三、 文档声明
- new File
- 命名:文件名.xml
- 声明: <?xml version="1.0" encoding="utf-8" ?>
version: xml的版本 encoding: xml文件的编码
四、 元素(标签)
- 定义:指从开始标签到结束标签的部分
- 格式 <标签名>封装的数据</标签名>
单标签 <标签名/><br/>换行 <hr/>水平线
双标签 <标签名>封装的数据</标签名> - 注意
a. 标签名大小写不敏感
b. 标签有属性,有基本属性和事件属性
c. 标签要闭合(不闭合,html中不报错)
d. 标签前后的大小写要一致
e. 标签必须正确嵌套
五、 xml命名规则
- 名称可以包含字母,数字 其他字符
- 名称不能以数字 标点符号开头
- 名称不能包含空格
六、 xml文档必须要有根元素
- 跟元素就是顶级元素
- 没有父标签的元素是顶级元素
- 根元素是没有父标签的顶级元素,而且是唯一一个才行
七、 xml属性
- xml的属性值必须加引号
- 特殊符号的转译
>
< &it
八、 xml注释
<!--注释-->
九、 文本区域(CDATA区)
- 作用:告诉xml解析器:里面的内容只是纯文本
十、 xml的解析技术
1. 两种xml解析技术:DOM Sax
2. 第三方解析:
jdom 在dom基础上进行了封装
dom4j 又对jdom进行了封装
pull主要用在Android手机开发,是在跟sax非常类似都是时间机制解析xml文件
3. Dom4j类库的使用
a. 先加载xml文件创建Domcument对象
b. 通过Domcument对象拿到根元素对象
c. 通过根元素.elelemts(标签名);可以返回一个集合,这个集合里放着.所有你指定的标签名的元素对象
d. 找到你象用修改,删除的子元素,进行相应的操作
e. 保存在硬盘上
4. 步骤
a. 创建一个com.atguigu.poji包
b. 创建一个book类
c. 写上标签的属性,进行封装 构造器 toString方法
d. 创建一个lib文件用来存放jar包
e. 将jar包复制,文件名中选择past将jar包导入
f. 将jar包添加到类路径:右键单击jar包—Add as Library
//build path---add to build path
g. 在book类的文件夹中创建一个Dom4jTest类
第一步: 把xml文件生成document对象
创建一个SaxReader对象
(创建一个SaxReader输入流,去读取xml配置文件)
Document document=saxReader.read("src/books.xml");
(导入 dom4j.Domcument)
System.out.println(document);
第二步: 读取books.xml文件生成book类
创建一个test2方法
读取book.xml文件
SAXReader reader =new SAXReader()
//在Junit测试中,相对路径是从模块名开始算
Document read=reader.read("src/books.xml");
//通过Document对象获取根元素<books>
Element rootElement=document.getRootElement;
System.out.println(rootElement);
//通过根元素获取book标签对象
//element elements都是通过标签名查找子元素,多个子元素用elements
List<Element> books=rootElement.elements("book");
//遍历,处理每个book标签转换为Book类
//asXML() 把标签对象 转换为标签字符串
//确定book标签
for(Element book:books){
System.out.println(book.asXML())
Element nameElement=book.element("name");
//得到书名
System.out.println(nameElement.asXML());
//得到内容
//getText();可以获取标签中的文本内容
String nameText=nameElement.getText();
System.out.println(nameText);
//直接获取标签名的文本内容
String priceText = book.elementText("price");
System.out.println(priceText);
String authorText=book.elementText("author");
//获取属性值
String snValue=book.attributeValue("sn");
//打印全部
System.out.println(
new Book
(snValue,nameText,Double.parseDouble(priceText),authorText))
}