學習筆記【JavaWeb-第六節:XML初步認識 與 Jsoup簡單入門】
技術標籤:# Java Webjavaxml
XML
概念
Extensible Markup Language 可擴充套件標記語言
可擴充套件:標籤都是自定義的。
功能
儲存資料:
- 配置檔案
- 在網路中傳輸
xml與html的區別
- xml的標籤都是自定義的,html的標籤都是預定義的
- xml的語法嚴格,html的語法鬆散
- xml是儲存資料的,html是展示資料的
語法
基本語法
- xml文件的字尾名.xml
- xml第一行必須定義為文件宣告
- xml文件中,有且僅有一個根標籤
- 屬性值必須用引號引起來
- 標籤要正確關閉
- xml標籤名稱區分大小寫
快速入門
<? xml version='1.0' ?>
<users>
<user>
<name>zhangsan</name>
<age>18</age>
<gender>male</gender>
</user>
<user>
<name>lisi</name>
<age>18</age>
<gender>female</gender>
</user>
</users>
組成部分
文件宣告
格式:
<?xml 屬性列表?>
屬性列表:
- version:版本號(必須屬性)
- encoding:編碼方式。告知解析引擎當前文件使用的編碼方式,預設值:ISO-8859-1
- standalone:是否獨立.yes or no。yes:不依賴其他檔案;no:依賴其他檔案
指令(瞭解)
結合css使用
如:
<?xml-stylesheet type="text/css" href="a.css" ?>
標籤
標籤為自定義的
規則:
- 名稱可以包含字母、數字以及其他的符號
- 名稱不可以用數字或標點開頭
- 名稱不能以字母xml(或者XML、Xml)開頭
- 名稱不能含有空格
屬性
id屬性值唯一
文字
CDATA區:在該區域中的資料會被原樣展示
格式:<![CDATA[資料]]>
w3c:全球資訊網聯盟
約束
規定xml文件的書寫規則
作為框架的使用者(程式設計師):
- 能夠在xml中引入約束文件
- 能夠簡單的讀懂約束文件
分類:
- DTD:一種簡單的約束技術
- Schema:一種複雜的約束技術
DTD:
引入dtd文件到xml文件中
-
內部dtd:將約束規則定義在xml文件中
-
外部dtd:將約束規則定義在外部的dtd檔案中
-
本地:
<!DOCTYPE 根標籤名 SYSTEM "dtd檔案的位置">
-
網路:
<!DOCTYPE 根標籤名PUBLIC "dtd檔名字" "dtd檔案的位置URL">
Schema
引入:
- 填寫xml文件的根元素
- 引入xsi字首。 xmlns:xsi=“http://www.w3.org/2001/XML Schema-instance”
- 引入xsd檔案名稱空間 xsi:schemaLocation=“http://www.itcast.cn/xml student.xsd”
- 為每一個xsd約束宣告一個字首,作為標識 xmlns=“http://www.itcast.cn/xml”
解析
操作xml文件,將文件中的資料讀取到記憶體中
操作xml文件
- 解析(讀取):將文件中的資料讀取到記憶體中
- 寫入:將記憶體中的資料儲存到xml文件中。持久化的儲存
解析xml的方式:
DOM:
將標記語言文件一次性載入到記憶體,在記憶體中形成一顆DOM樹
- 優點:操作方便,可以對文件進行CRUD的所有操作
- 缺點:佔記憶體
SAX:
逐行讀取,基於事件驅動的
- 優點:不佔記憶體
- 缺點:只能讀取,不能增刪改
xml常見的解析器
- JAXP:sun公司提供的解析器,支援dom和sax兩種思想
- DOM4J:非常優秀的解析器
- Jsoup:是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。
- PULL:Android作業系統內建的解析器,sax方式的。
Jsoup
快速入門:
步驟:
- 匯入jar包
- 獲取Document物件
- 獲取對應標籤Element物件
- 獲取資料
//獲取student.xml的路徑
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
//解析xml文件,載入文件進記憶體,獲取dom樹-->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//獲取元素物件 Element
Elements names = document.getElementsByTag("name");
//獲取資料
System.out.println(names.get(0).text());
物件的使用
Jsoup:
工具類,可以解析html或xml的文件,返回Document物件
Document parse(File in, String charsetName)
將檔案的內容解析為HTML。Document parse(String html)
將HTML解析為文件。Document parse(URL url, int timeoutMillis)
獲取一個URL,並將其解析為HTML。
Document:
文件物件,代表記憶體中的dom樹
獲取Element物件:
Elements getElementsByTag(String tagName)
使用標籤名稱獲取元素物件集合。Elements getElementsByAttribute(String key)
根據屬性名獲取元素物件集合Elements getElementsByAttributeValue(String key, String value)
根據對應的屬性名和屬性值獲取元素物件集合
Elements:
元素Element物件的集合。可以當作一個ArrayList<Element>
來使用
Element:
元素物件
獲取屬性值:
String attr(String attributeKey)
根據屬性名稱獲取屬性值。
獲取文字內容
String text()
獲取子標籤的純文字內容String html()
獲取標籤體的所有內容(包括子標籤的標籤和文字內容)
Node:
節點物件。是Document和Element 的父類
快捷查詢方式
1.selector 選擇器
使用的方法:Elements select(String cssQuery)
語法可參考Selector類中定義的語法
String path = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
System.out.println(document.select("student[number='s001']>age").text());
2.XPath
XML路徑語言(XML Path Language),它是一種用來確定XML文件中某部分位置的語言。
步驟:
- 額外匯入jar包
- 查詢w3c手冊的xpath語法
String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
//建立XPath的JXDocument物件
JXDocument jxDocument=new JXDocument(document);
//結合XPath語法查詢
List<JXNode> students = jxDocument.selN("//student");
List<JXNode> names = jxDocument.selN("//student/name[@id='1']");
for (JXNode name:names){
System.out.println(name);
}