1. 程式人生 > 其它 >學習筆記【JavaWeb-第六節:XML初步認識 與 Jsoup簡單入門】

學習筆記【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);
}