XML要点总结
Posted --believe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML要点总结相关的知识,希望对你有一定的参考价值。
XML可扩展标记语言
1.概述
1.概念
XML(Extensible Markup Language可拓展标记语言)
2.功能
存储数据,一般用于做配置文件,或者在网络中传输(通常用json文件)
3.XML和html区别
- xml标签是自定义的,所以需要有约束文件。
- xml的语法严格,html语法松散
- xml主要用于存储数据,html展示数据
4.语法
- 文档后缀名xml
- 第一行
<?xml version='1.0' encoding='utf8'?>
是文档声明 - xml中有且仅有一个根标签
- 属性值要用(单双)引号引起来
- 区分大小写
5.快速入门
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
<br/>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
6.主要部分
1.文档声明
1.格式
<?xml 属性列表 ?>
2.属性列表
- version:版本号,一般用1.0
- encoding:编码方式。
- standalone:是否独立,yes 或者 no用于表示是否依赖其他文件
2.属性
id值是唯一的
2.约束:规定XML文档的书写诡诈
1.要求
- 能够在xml中引入约束文档
- 能够简单读懂约束文档
2.分类
1.DTD:Document Type Define,简单的文档类型约束技术
1.将约束规则引入xml文件中两种方式
- 本地:
<!DOCTYPE 根标签名 SYSTEM "文件位置">
- 网络:
<!DOCTYPE 根标签名 PUBLIC"文件位置">
2.快速入门
<?xml version="1.0" encoding="UTF-8" ?>
<!--从外部引入文档类型定义-->
<!--<!DOCTYPE students SYSTEM "student.dtd">-->
<!--内部定义文档类型定义-->
<!DOCTYPE students [
<!ELEMENT students (student*) > <!--表示students标签下student标签可以无数个-->
<!ELEMENT student (name,age,sex)><!--表示student下标签有name、age、sex-->
<!ELEMENT name (#PCDATA)><!--表示name类型为parse character data类型-->
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED><!--表示属性列表,student标签的number属性是唯一的(iD),且必须的(REQUIRED)-->
<!ENTITY msg "hello"> <!-- 表示定义一个实体引用,可以直接用msg表示"hello" -->
]>
<students>
<student number="first">
<name>张三</name>
<age>12</age>
<sex>男</sex>
</student>
<student number="second">
<name>李四&msg;</name>
<age>12</age>
<sex>男</sex>
</student>
</students>
2.Schema:略微复杂的xml文档约束技术
<?xml version="1.0" encoding="UTF-8" ?>
<!--
1.填写xml文档的根元素
2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
-->
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
>
<!--上面表示引入约束文件-->
<!--
第一句表示引入w3cschool定义的命名空间,并且取别名xsi
第三句(先看第三句)表示该xml文件引入本地的xsd约束文件student.xsd(使用w3cschool定义的命名空间xsi下schemaLocation命令),并且用别名http://www.itcast.cn/xml代替
第二句表示命名空间http://www.itcast.cn/xml不在标签前面加前缀,默认是该命名空间如students标签未加前缀就表示该命名空间。
-->
<student number="heima_0001">
<name>tom</name>
<age>18</age>
<sex>male</sex>
</student>
</students>
3.解析
1.方式
-
DOM
将标记语言一次性加载进内存形成DOM树。因为比较占内存,所以一般用于PC端
-
SAX
逐行读取,是基于事件驱动的,一般用于手机端,因为内存小。
2.XML解析器JSOUP
1.快速入门
1.步骤
- 导入jsoup的jar包
- 获取document对象
- 获取标签Element对象
- 获取数据
2.代码
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象 Element
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//3.1获取第一个name的Element对象
Element element = elements.get(0);
//3.2获取数据
String name = element.text();
System.out.println(name);
2.主要对象使用
1.Document
Jsoup静态方法parsexml文件获取
2.Element
通过getElementByxx获取,下面也会介绍快捷的方式select获取xpath获取
3.获取属性值
String attr(String key)
4.获取文本
- string text()
- string html()
3.快捷查询1selector
- select(String cssQuery),就是css中定位元素的方法
- 参考文档中的Selector类中的方法
4.快捷查询2xpath
-
需要导入xpath对应的jar包
-
new JXDocument对象,参数为jsoup获取的document对象
-
代码
//1.获取student.xml的path String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath(); //2.获取Document对象 Document document = Jsoup.parse(new File(path), "utf-8"); //3.根据document对象,创建JXDocument对象 JXDocument jxDocument = new JXDocument(document); //4.结合xpath语法查询 //4.1查询所有student标签 List<JXNode> jxNodes = jxDocument.selN("//student"); for (JXNode jxNode : jxNodes) System.out.println(jxNode); System.out.println("--------------------"); //4.2查询所有student标签下的name标签 List<JXNode> jxNodes2 = jxDocument.selN("//student/name"); for (JXNode jxNode : jxNodes2) System.out.println(jxNode); System.out.println("--------------------"); //4.3查询student标签下带有id属性的name标签 List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]"); for (JXNode jxNode : jxNodes3) System.out.println(jxNode); System.out.println("--------------------"); //4.4查询student标签下带有id属性的name标签 并且id属性值为itcast List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']"); for (JXNode jxNode : jxNodes4) System.out.println(jxNode);
以上是关于XML要点总结的主要内容,如果未能解决你的问题,请参考以下文章