1、什么是xml?
xml是可扩展的标记行语言。
2、xml的作用?
1.用来保存数据,而且这些数据具有自我描述性
2.它还可以作为项目或者模块的配置文件
3.还可以作为网络传输数据的格式(现在json为主)
3、xml语法
3.1.文档声明
<?xml version="1.0" encoding="utf-8" ?>
<!--
<?xml version="1.0" encoding="utf-8" ?>
以上内容就是xml文件的声明
version=“1.0” 表示xml的版本
encoding=“utf-8” 表示xml文件本身的编码
-->
<!---->
<books>
<book sn="Sn123412123412"> <!--sn 属性表示图书的序列号-->
<name>时间简史</name> <!--name标签表示书名-->
<author>霍金</author> <!--author 表示作者-->
<price>75</price> <!--表示图书价格-->
</book>
<book sn="Sn123412123411"> <!--sn 属性表示图书的序列号-->
<name>java从入门到放弃</name> <!--name标签表示书名-->
<author>沙老师</author> <!--author 表示作者-->
<price>75</price> <!--表示图书价格-->
</book>
</books>
3.2.xml注释
跟 html 一样 使用 <!-- -->
3.3.元素(标签)
1.什么是xml元素
2.xml命名规则
xml元素必须遵循以下命名规则:
2.1 名称可以含字母,数字以及其他的字符
2.2 名称不能以数字或者标点符号开始
2.3 名称不能以字符“xml”(或者XML,Xml)开头。(是可以的)
2.4 名称不能包含空格
3.xml中的元素也分单标签和双标签
3.4.xml属性
xml的标签属性和html的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。每个属性的值必须使用引号 引起来。
3.5语法规则
3.5.1 所有的xml元素都必须有关闭标签(也就是闭合);
3.5.2 xml标签对大小写敏感;
3.5.3 xml必须正确的嵌套
3.5.4 xml 文档必须有根元素
根元素就是顶级元素,
没有父标签的元素,叫顶级元素,
根元素是没有父标签的顶级元素,而且是唯一一个才行。
3.5.5 xml 的属性值必须加引号
3.5.6 xml中的特殊字符
3.5.7 文本区域(CDATA区)
CDATA语法可以告诉xml解析器,CDATA里的文本内容,只是纯文本,不需要xml语法解析。
<![CDATA[
<<<<<>>>>>>文本
]]>
4、xml解析技术介绍
xml可扩展的标记语言
不管是html文件还是xml文件他们都是标记性文档,都可以使用w3c组织制定的dom技术来解析。
document对象表示的是整个文档(可以是html文档,也可以是xml文档)
dom解析技术是w3c组织制定的,而所有的编程严阿姨都对这个解析技术使用了自己语言的特点进行实现。java对dom技术解析标记也做了实现。
第三方的解析:
jdom 在dom基础上进行封装;
dom4j 又对jdom进行封装;
pull 主要用在Android手机开发,是在跟sax非常类似都是事件机制解析xml文件;
这个Dom4j 它是第三方的解析技术,我们需要使用第三方给我们提供好的类库才可以解析xml文件。
4.1 Dom4j类库的使用
4.2 dom4j目录的介绍
4.3 dom4j 编程步骤
4.4 获取document对象
创建一个lib目录,并且添加dom4j的jar包。并添加到类路径。
add as Library
4.5 遍历 标签 获取所有标签中
package com.atguigu.pojo;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.List;
public class Dom4jTest{
@Test
public void test1() throws Exception {
//创建一个saxReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 读取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()把标签对象转换为标签字符
//System.out.println(book.asXML());
Element nameElement = book.element("name");
System.out.println(nameElement.asXML());
String nameTest = nameElement.getText();
System.out.println(nameTest);
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,nameTest,Double.parseDouble(priceText),authorText));
}
}
}