java學習與應用(4.3.1)–XML與解析
- 2020 年 2 月 23 日
- 筆記
XML
XML(extensible markup language可擴展標記語言),由萬維網聯盟(W3C)提出,以替代HTML,後來基本用語存儲數據(配置文件,網路中傳輸文件) 第一行文檔聲明:<?xml version='1.0'?>(屬性列表如version[必選],encoding[默認iso-8859-1],standalone[文件是否獨立,已失效]),<?xml-stylesheet tpye="text/css" href="xxx.css"?>用於早起和css配合控制樣式顯示網頁。 然後自定義文檔標籤,有且只有一個跟標籤,屬性值以引號引起,標籤必須正確關閉(配對或自閉和),並區分大小寫。標籤需要id唯一,CDATA區內容被原樣展示(針對特殊字元)(<![DATA[原樣展示的數據]]>) 約束:說明文檔規定xml文檔的書寫規則,作為框架的使用者,在xml中引入約束文檔(DTD、Schema)。 DTD:<!ELEMENT >定義標籤,後添加括弧中內為允許的子標籤,以*為可出現無數次,+為一次或多次,#PCDATA為字元串。<!ATTLIST>定義標籤擁有的屬性,順次為標籤、屬性、屬性類型們(#REQUIRED為必須出現)。 DTD有外部dtd,分本地(<!DOCTYPE 根標籤名 SYSTEM "dtd位置">)和網路(<!DOCTYPE 根標籤名 PUBLIC "dtd文件名" "url位置">)。也有內部dtd在xml內(<!DOCTYPE 根標籤名 [dtd內容]>)。 Schemla約束:能定義字元串內容約束等,xsd後綴。引入方式:在根標籤的屬性中引入xsi前綴,引入xsd文件命名空間,為每一個xsd約束聲明前綴以簡化命名空間,xmlns後為空位默認空前綴。
<?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" > <student number="heima_0001"> <name>tom</name> <age>18</age> <sex>male</sex> </student> </students>
XML解析
XML解析:DOM方式解析(服務端),根據dom樹進行CRUD操作,操作方便但占記憶體。SAX方式解析(移動端),逐行讀取,基於事件驅動,不佔記憶體,但只能讀取。 解析器:JAXP由sun公司提供支援dom和sax,DOM4J比較優秀的解析器。Jsoup解析html等【示例】,PULL是Android內置的解析器。導入jar包,獲取Document對象,Element對象,獲取數據。 Jsoup的使用程式碼見Demo1。 Jsoup工具對象解析html(parse傳入文件和編碼或字元串數據或網路資源URL對象和超時時間以載入dom), Document對象代表dom樹(根據標籤屬性id等獲取Elements對象以獲取元素集合[ArrayList]),Elements代表Element對象集合, Element元素對象(包含獲取子標籤getElement等方法,attr根據屬性名獲取屬性值,text獲取文本內容,html獲取標籤體的內容),Node節點對象(Document和Element的父類對象)。 快捷查詢方式:selector選擇器,參考Select類定義的方法。document.select方法,用於獲取元素和屬性值匹配的數據,中括弧內為屬性選擇,引號添加轉義,>為其子標籤。 XPath:導入jar包,獲取Document對象,創建JXDocument對象,使用JXDocument的語法查詢,查詢方法如selN方法中寫入路徑表達式(見手冊)。