什么是xml?
xml是可扩展的标记性语言
xml主要作用?
1.用来保存数据
而且这些数据具有自我描述性
students.xml
<students>
<student>
<id>1</id>
<name>华仔</name>
</student>
<student>
<id>2</id>
<name>张三</name>
</student>
</students>
2.还可以作为项目或者框架的配置文件
3.还可以作为网路传输数据的格式(现在以JSON为主)
xml语法
1.文档声明
2.元素(标签)
3.xml属性
4.xml注释
5.文本区域(CDATA区)
简单xml实例
<?xml version="1.0" encoding="utf-8" ?> <!--如果没有提示错误信息的IDE 可以使用浏览器打开 可以获得提示-->
<!--
<?xml version="1.0" encoding="utf-8" ?>
以上内容是对xml文件的声明
version="1.0" version表示xml版本
encoding="utf-8" encoding表示xml文件本身的编码
-->
<books> <!--books表示多个图书信息-->
<book sn="SN7414213"> <!--book表示一个图书信息 sn表示图书序列号-->
<name>时间简史</name> <!--name表示书名-->
<author>霍金</author> <!--author表示作者-->
<price>75</price> <!--price表示图书价格-->
</book>
<book sn="SN7466414"> <!--book表示一个图书信息 sn表示图书序列号-->
<name>Java从入门到放弃</name> <!--name表示书名-->
<author>高哥</author> <!--author表示作者-->
<price>9.9</price> <!--price表示图书价格-->
</book>
</books>
xml语法介绍
注释
注释与html一样 < !-- – >(<跟!间没有空格 -与>之间也没有空格)
元素(标签)
回忆一下html标签
格式:<标签名>封装的数据</标签名>
单标签:<标签名/>
双标签:<标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性有基本属性和事件属性
标签要闭合(不闭合 html不报错 但是要养成好的书写习惯 语法要求闭合)
xml元素是开始标签和结束标签内的部分
元素可以有子元素和属性
xml名称规范
名称可以包含字母数字以及其他字符
文档中说名称不能以 "xml"开头(但是实际操作是可以的)
名称不能包含空格(会看成属性)
名称也分别有单标签与双标签
</book sn="SN313564" name="辟邪剑谱" author=“林平之” price="999999">
xml属性
1.xml属性可以提供元素的额外信息
2.属性值必须要用"引号"引起来
语法规则
所有xml元素都须有关闭标签(也就是闭合)
xml对大小写敏感
xml标签必须正确嵌套
xml文档必须有根元素
根元素就是*元素(没有父标签的元素 而且是唯一一个才行)
xml属性值必须要用"引号"引起来
某些特殊字符使用时要用 特殊方法 显示
(例:
使用& lt表示;小于号
使用& gt;表示大于号
)
如果有大量需要转义的字符
CDATA语法可以告诉xml解析器 “CDATA里面是纯文本 不需要xml语法解析”
<![CDATA[
这里所有内容都会被解析为文本
<<<>>> 都不会被误解
<老师好>
]]>
xml解析技术介绍
xml类似html都是标记型文档 都可以使用w3c组织制定的dom技术来解析
标签都会解析为dom对象
早期JDK 提供了两种xml解析技术DOM和SAX
dom4j解析技术
需要去官网下载dom4jjar包
使用dom4j
一.将dom4j的jar包添加到类路径
1.创建一个Book类
对照xml的属性创建对应属性
自动生成getter setter方法
无参有参构造方法
重写toString()
2.将jar包添加到类路径
创建目录lib/dom4j.jar
将jar包添加到类路径(add as library)(选择Module Library 仅给自己使用)
3.添加成功后lib下的dom4j.jar就可以预览了(有个向下的箭头)
二
1.创建Dom4jTest.java
2.写dom4j的方法
@Test
public void test1(){}
//这里需要导入jUnit4的jar包并添加到类路径下
public class Dom4jTest{
@Test
public void dom4j(){
//创建一个SAXReader输入流 去读取xml配置文件生成document对象
SAXReader saxreader=new SAXReader();
//xml的路径传入read方法 读取xml配置文件生成document对象
//可能存在异常 可以抛出 也可以catch
//创建Document对象成功
Document dom=saxreader.read("src/books.xml");
}
//读取books.xml生成Book类
@Test
public void test2(){
//1.读取books.xml文件
//SAXReader 一层一层的去获取他的子元素信息
SAXReader saxreader=new SAXReader();
//相关路径从模块名开始算
Document dom=saxreader.read("src/books.xml");
//2.通过document对象获取根元素
Element rootElement=dom.getRootElement();
//3.通过根元素获取book对象
//element()和elements()都是通过标签名查找子元素(分别查找一个或多个)
List<Element> books=rootElement.elements("book");
//4.遍历处理每一个book标签转换为book类
for(Element book:books){
Element nameElement=book.element("name");
//getText方法可以获取这个标签中的文本内容
String nameText=nameElement.getText();
//直接获取指定标签名的文本内容
String priceText=book.elementText("price");
String priceText=book.elementText("author");
String snValue=book.attributeValue("sn");
Book book=new Book
(snValue,nameText,Double.ParseDouble(priceText),authorText);
}
}
}