xml概念
- 可扩展标记语言 extensible
- 作用:1 配置文件 2 传输 3存储
- 特点:
后缀:.xml
声明必须第一行
只有一个根标签
标签闭合
属性用引号
区分大小写 - xml出现的历史:html 不严谨,各个浏览器引擎解析不一样(各种简化),W3C为了规范,想用更严谨的xml代替html,但是没有成功,转而跟property竞争。
优势:可以配置复杂的信息 - 传输用json
- 两种书写方式:
<student>
<name>jack</name>
</student>
<student name=’jack’></student> 属性值必须用引号
xml内容
- 声明:<?xml version="1.0" encoding="UTF-8"?>
- 指令:<?xml-stylesheet type="text/css" href="a.css" ?> 可以改变xml的样式
- 标签:命名规格跟Java查不多,不能用xml做标签
- ID值唯一
- 文本
- 注释和html的一样
- CDATA 原样输出: <![CDATA[ 数据 ]]>
约束:
- 规定和xml的书写规范,主要是为了让按照制定者的规则写配置文件
分类: DTD Schema
DTD:
- 引入dtd文档到xml文档中
– 内部dtd:将约束规则定义在xml文档中
– 外部dtd:将约束的规则定义在外部的dtd文件中
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
记忆:从dtd文件的 跟标签为位置开始引用规则
<!ELEMENT students(student*)> <!ELEMENT student(name,age,sex)> <!ELEMENT name(#PCDATA)> <!ELEMENT age(#PCDATA)> <!ELEMENT sex(#PCDATA)> <!ELEMENT student number ID #REQUIRED>
xml文档第一句是声明,第二句就是引入DTD文件
DTD缺点:没有对文本进行过校验
Schema
- 以.xsd结尾的文件 ,本质就是xml
- 引入方式
xmlns :xml命名空间
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 指定编写的规则
xmlns:tx="命名空间(约束的名字)"
xsi:schemaLocation=" ”
解析
- 过程:读到内存—>硬盘持久化
- DOM解析:全部加载到内存以后才解析,dom树的文档格式,比原有的文件大1000-10000 倍,方便定位,可以crud.
- SAX解析:逐行驱动事件,内存中只有一条语句,所以基本不占内存,适用于手机端,不能增删改
Jsoup
-
Jsoup :工具类,解析返回的是dom树。(完整的网页的html代码)
-
过程;
1获取xml的路径
String path = Demo.class.getClassLoader().getResource(“students.xml”).getPath();
2 解析xml
Document document = Jsoup.parse(new File(path), “utf-8”);
3 根据document 查询需要的信息 -
Document的方法 返回element
document.getElementById(“a001”);
document.getElementsByAttribute(“id”);
document.getElementsByAttributeValue(“id”,“a001”);
document.getElementsByTag(“student”);
Elements select(“CSS选择器”); -
Element和Elements的方法
size();//获取长度
get(int index)//获取指定位置的元素
String attr(“属性名”);//根据属性名获取属性值
String text();//获取标签中的所有的纯文本内容
String html();//获取标签中的内容 获取的是标签中的内容,不包含标签
elements.getElementById(“a001”); 包含id标签
elements.getElementsByAttribute(“id”);
elements.getElementsByAttributeValue(“id”,“a001”);
elements.getElementsByTag(“student”);
**document继承element
**node
**parse的用法
1 parse(path,编码)
2 parse(url,2000ms) 解析网页
3 parse(String)
XPATH语法
JXDocument jxDocument = new JXDocument(document);
jxDocument.selN() 返回的是一个结点的列表
Node变成元素:node.getelement()
获取所有的标签 //标签名
获取子标签 /标签名 //aaa/bbb
获取属性 @属性名 只有有这个属性就可以获取到
标签名[@属性名=‘值’] 获取属性=“值”的标签
String path = Demo.class.getClassLoader().getResource(“students.xml”).getPath();
Document document = Jsoup.parse(new File(path), “utf-8”);
JXDocument jxDocument = new JXDocument(document);
List jxNodes = jxDocument.selN("//student[@id=‘a002’]");
for (JXNode jxNode : jxNodes) {
System.out.println(jxNode.getElement().attr(“name”));
}