掌握XML的一些知识
1.什么是 什么是 xml?
xml 是可扩展的标记性语言。
2.xml 的作用?
xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)。
3.xml 语法
- 文档声明。
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
3.1、文档声明
1.创建xml文件:
2.编辑文件名:
3.代码示例
3.2 、xml 注释 注释
html 和 XML 注释 一样 : <!-- html 注释 -->
3.3、元素(标签)
1 )什么是 xml 元素:
2 )XML 命名规则:
XML 元素必须遵循以下命名规则:
2.1)名称可以含字母、数字以及其他的字符
2.2)名称不能以数字或者标点符号开始
2.3)名称不能包含空格
3 )xml 也 中的元素(标签)也 成 分成 单标签和双标签:
单标签
格式: <标签名 属性=”值” 属性=”值” … />
双标签
格式:< 标签名 属性=”值” 属性=”值” …>文本数据或子标签</标签名>
3.4 、xml 属性
xml 的标签属性和 html 的标签属性是非常类似的, 属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。用 每个属性的值必须使用 引号 引起来。
的规则和标签的书写规则一致。
3.5、语法规则:
- 所有 XML 元素都须有关闭标签(也就是闭合标签)
- XML 标签对大小写敏感
- XML 必须正确地嵌套
- XML 文档必须有根元素
- XML 的属性值须加引号
- XML 中的特殊字符
- 文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
CDATA 格式:
<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
2 、dom4j 解析技术 (重点*****)
由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j的 jar 包。
2.1、dom4j 编程步骤: 编程步骤:
- 第一步: 先加载 xml 文件创建 Document 对象
- 第二步:通过 Document 对象拿到根元素对象
- 第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
- 第四步:找到你想要修改、删除的子元素,进行相应在的操作
- 第五步,保存到硬盘上
2.2、获取 document 对象
创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。
需要解析的 books.xml 文件内容:
解析获取 Document 对象的代码:
第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document
public class Dom4jTest {
@Test
public void test1() throws Exception {
//创建一个SAXReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}
2.3、遍历 、标签 获取所有标签中的内容( 获取所有标签中的内容(*****重点)
需要分四步操作:
- 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
- 第二步,通过 Document 对象。拿到 XML 的根元素对象
- 第三步,通过根元素对象。获取所有的 book 标签对象
- 第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText()
方法拿到起始标签和结束标签之间的文本内容
/**
* 读取books.xml文件生成Book类
*/
@Test
public void test2() throws Exception {
//1 读取books.xml文件
SAXReader reader=new SAXReader();
//在Junit测试中,相对路径是从模块名开始算
Document document = reader.read("src/books.xml");
//2 通过Document对象获取根元素
Element rootElement = document.getRootElement();
System.out.println(rootElement);
//3 通过获取book标签对象
//element()和elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
//4 遍历 处理每个book标签转化为Book类
for (Element book : books){
//asXML()吧标签对象转化为字符串
Element nameElement = book.element("name");
//getText()可以获取标签中的文本内容
String nameText=nameElement.getText();
System.out.println(nameText);
//直接获取指定标签名的文本内容
String priceText = book.elementText("price");
String authorText=book.elementText("author");
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue,nameText,Double.parseDouble(priceText),authorText));
}
}
结果: