大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 XPATH解析XML文件實例

XPATH解析XML文件實例

更新時間:2020-12-09 17:22:01 來源:動力節點 瀏覽1635次

XPath,全稱 XML Path Language,即 XML 路徑語言,它是一門在XML文檔中查找信息的語言。XPath最初設計是用來搜尋XML文檔的,這是因為XML表述了一種樹狀結構,而XPath作為一種小型的查詢語言能夠根據XML結構樹在樹中尋找節點。因此,XPATH解析XML文件也是手到擒來。

 

XPath 的選擇功能十分強大,它提供了非常簡潔明了的路徑選擇表達式,另外它還提供了超過 100 個內建函數用于字符串、數值、時間的匹配以及節點、序列的處理等等,幾乎所有我們想要定位的節點都可以用XPath來選擇。XPath 于 1999 年 11 月 16 日 成為 W3C 標準,它被設計為供 XSLT、XPointer 以及其他 XML 解析軟件使用,XPath定義了一組語法,能夠從結構樹中篩選出滿足要求的節點。

 

我們現用一個實例來感受一下使用 XPath解析 XML文件解析的過程,代碼如下:

import java.util.Iterator;

import java.util.List;

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Node;

import org.dom4j.io.SAXReader;

 

public class TestXPath {

public static void main(String[] args) throws DocumentException {

//1 創建SAXReader對象

SAXReader reader = new SAXReader();

//2 讀XML文件

Document doc = reader.read("web/book.xml");

//得到第一個author節點

Node node = doc.selectSingleNode("//author");

System.out.println("節點的名稱:" + node.getName() + "\t" + node.getText());


//得到所有author節點


List<Node> nodeList = doc.selectNodes("//author");

for (Iterator<Node> iBook = nodeList.iterator();iBook.hasNext();) {

Node n = iBook.next();

System.out.println("節點的名稱:" + n.getName() + "\t" + n.getText());

}

List<Node> nameList = doc.selectNodes("//name");

for (Iterator<Node> iBook = nameList.iterator();iBook.hasNext();) {

Node n = iBook.next();

System.out.println("節點的名稱:" + n.getName() + "\t" + n.getText());

}

}

}

在這里我們首先導入了 LXML 庫的 etree 模塊,然后聲明了一段 XML文本,調用 XML 類進行初始化,這樣我們就成功構造了一個 XPath 解析對象,在這里注意到XML文本中的最后一個 li 節點是沒有閉合的,但是 etree 模塊可以對XML文本進行自動修正。

 

我們一般會用 // 開頭的 XPath 規則來選取所有符合要求的節點,以上文的XML文本為例,如果我們要選取所有節點,可以這樣實現:from lxml import etree

xml= etree.parse('./testxml', etree.XMLParser())

result =xml.xpath('//*')

print(result)

運行結果:

[<Element xml at 0x10510d9c8>, <Element body at 0x10510da08>, <Element div at 0x10510da48>, <Element ul at 0x10510da88>, <Element li at 0x10510dac8>, <Element a at 0x10510db48>, <Element li at 0x10510db88>, <Element a at 0x10510dbc8>, <Element li at 0x10510dc08>, <Element a at 0x10510db08>, <Element li at 0x10510dc48>, <Element a at 0x10510dc88>, <Element li at 0x10510dcc8>, <Element a at 0x10510dd08>]

我們在這里使用 * 代表匹配所有節點,也就是整個XML文本中的所有節點都會被獲取,可以看到返回形式是一個列表,每個元素是 Element 類型,其后跟了節點的名稱,如 xml、body、div、ul、li、a 等等,所有的節點都包含在列表中了。當然此處匹配也可以指定節點名稱,如果我們想獲取所有 li 節點,示例如下:

from lxml import etree

html = etree.parse('./test.html', etree.XMLParser())

result = xml.xpath('//li')

print(result)

print(result[0])

在這里我們要選取所有 li 節點可以使用 //,然后直接加上節點的名稱即可,調用時直接調用 xpath() 方法即可提取。運行結果:[<Element li at 0x105849208>, <Element li at 0x105849248>, <Element li at 0x105849288>, <Element li at 0x1058492c8>, <Element li at 0x105849308>]

<Element li at 0x105849208>

在這里我們可以看到提取結果是一個列表形式,其每一個元素都是一個 Element 對象,如果要取出其中一個對象可以直接用中括號加索引即可取出,如 [0]。

 

javax.xml.xpath包提供了強大的XPath解析功能,因此我們可以基于它實現XML的解析。XPathParser類中封裝了“javax.xml.xpath.XPath”類的對象。我們已經知道XPath對象是XML解析的利器,因此XPathParser類便具有了XML解析的能力。

下面代碼給出了XPathParser類的帶注釋的屬性。// 代表要解析的整個XML文檔

private final Document document;

// 是否開啟驗證

private boolean validation;

// EntityResolver,通過它可以聲明尋找DTD文件的方法,例如通過本地尋找,而不是只能通過網絡下載DTD文件

private EntityResolver entityResolver;

// MyBatis配置文件中的properties節點的信息

private Properties variables;

// javax.xml.xpath.XPath工具

private XPath xpath;

 

有必要說明一下,上述“private Properties variables”屬性存儲的內容就是MyBatis配置文件中properties節點的信息。properties節點會在解析配置文件的最開始就被解析,然后相關信息會被放入“private Properties variables”屬性并在解析后續節點時發揮作用。

 

實際上,你不要以為XPath解析XML文件是專屬,相反同樣適用于解析HTML文件,而且XPath在做爬蟲時對信息的抽取能力也是十分出眾的。想深入學習XPath的小伙伴,可以在本站的XML教程中找到XPath的更多知識。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 男人影院在线观看 | 国产欧美亚洲精品综合在线 | 亚洲乱强伦 | 福利色姬网站视频入口 | 四虎看片 | 亚洲网站在线看 | 国产精品1区 | 久久久噜噜噜久久老司机 | 美女视频黄视大全视频免费网址 | 成人区精品一区二区不卡亚洲 | a级毛片视频 | 97综合视频 | 国产欧美日本在线观看 | 久久精品福利 | 亚洲欧美综合视频 | 狠狠色成人综合网图片区 | 亚洲 另类色区 欧美日韩 | 99久久香蕉国产线看观香 | 日本黄色网址免费 | 国产成人一区 | 九九热精彩视频 | 国产成人精品三级91在线影院 | 日本操操操 | 四虎影视紧急入口地址大全 | 婷婷六月激情在线综合激情 | 天天插天天插天天插 | 日本三级欧美三级 | 99只有精品 | 国产色婷婷视频在线观看 | 男女生性毛片免费观看 | 亚洲成年人在线观看 | 天天天天天天操 | 天天操综合 | 七七影院九色桃花78 | 12一14周岁毛片免费网站 | 国产精品98福利小视频 | 4hu影院最新地址www | 日韩深夜 | a级爱爱视频| 免费看又爽又黄禁片视频1000 | 精品视频在线播放 |