溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XPath怎么用

發布時間:2021-12-04 09:52:27 來源:億速云 閱讀:166 作者:小新 欄目:大數據
# XPath怎么用

## 目錄
1. [XPath概述](#xpath概述)
2. [XPath基礎語法](#xpath基礎語法)
   - 2.1 [節點選擇](#節點選擇)
   - 2.2 [路徑表達式](#路徑表達式)
   - 2.3 [謂語(Predicates)](#謂語predicates)
3. [XPath高級用法](#xpath高級用法)
   - 3.1 [軸(Axes)](#軸axes)
   - 3.2 [運算符](#運算符)
   - 3.3 [函數](#函數)
4. [XPath實戰應用](#xpath實戰應用)
   - 4.1 [在XML文檔中使用](#在xml文檔中使用)
   - 4.2 [在HTML網頁抓取中的應用](#在html網頁抓取中的應用)
   - 4.3 [與其他技術結合](#與其他技術結合)
5. [常見問題與解決方案](#常見問題與解決方案)
6. [總結](#總結)

---

## XPath概述

XPath(XML Path Language)是一種用于在XML和HTML文檔中導航和查詢節點的語言。它由W3C于1999年推出,現已成為XML處理的標準工具之一。XPath通過路徑表達式(類似文件系統路徑)來定位文檔中的特定節點或節點集。

**核心特點**:
- 簡潔的路徑表達式語法
- 支持邏輯運算和條件篩選
- 提供豐富的內置函數庫
- 可擴展性強

---

## XPath基礎語法

### 節點選擇
XPath將文檔視為節點樹,主要節點類型包括:
- 元素節點 `<book>`
- 屬性節點 `category="web"`
- 文本節點 `"XPath Tutorial"`
- 注釋節點 `<!-- 注釋 -->`
- 命名空間節點

**基本選擇器**:
| 表達式      | 說明                     |
|-------------|--------------------------|
| `nodeName`  | 選擇所有名為nodeName的節點|
| `/`         | 從根節點開始選擇         |
| `//`        | 從當前節點選擇文檔中的匹配節點,不考慮位置 |
| `.`         | 當前節點                 |
| `..`        | 父節點                   |
| `@`         | 選擇屬性                 |

### 路徑表達式
**示例文檔**:
```xml
<bookstore>
  <book category="web">
    <title lang="en">XPath Tutorial</title>
    <author>John Doe</author>
    <price>30.00</price>
  </book>
</bookstore>

路徑示例: 1. /bookstore/book - 選擇根元素bookstore下的所有book元素 2. //book - 選擇文檔中所有book元素 3. //@lang - 選擇所有名為lang的屬性

謂語(Predicates)

用于過濾節點,寫在方括號中:

  1. /bookstore/book[1] - 選擇第一個book元素
  2. /bookstore/book[last()] - 選擇最后一個book元素
  3. //title[@lang='en'] - 選擇所有lang屬性值為en的title元素
  4. /bookstore/book[price>35.00] - 選擇price大于35的book

XPath高級用法

軸(Axes)

定義相對于當前節點的節點集:

軸名稱 說明
child 當前節點的所有子節點
parent 當前節點的父節點
ancestor 當前節點的所有祖先
descendant 當前節點的所有后代
following 文檔中當前節點之后的所有節點
preceding 文檔中當前節點之前的所有節點
attribute 當前節點的所有屬性

使用語法軸名稱::節點測試[謂語]

示例:

//book/ancestor::bookstore  # 選擇book的所有bookstore祖先

運算符

常用運算符包括: - | 并集(如 //book | //cd) - + - * div mod 算術運算 - = != < > <= >= 比較運算 - and or 邏輯運算

函數

XPath提供超過100個內置函數,主要分類:

字符串函數: - concat() - contains() - substring() - string-length()

數值函數: - sum() - floor() - ceiling() - round()

節點函數: - count() - position() - last()

布爾函數: - not() - true() - false()

示例:

//book[contains(title, 'XPath')]  # 選擇title包含"XPath"的book

XPath實戰應用

在XML文檔中使用

Java示例

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = factory.newDocumentBuilder().parse("books.xml");

XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("//book[price>30]", doc, XPathConstants.NODESET);

在HTML網頁抓取中的應用

Python+lxml示例

from lxml import html

page = requests.get('http://example.com')
tree = html.fromstring(page.content)

# 獲取所有鏈接
links = tree.xpath('//a/@href')

# 獲取特定class的div內容
divs = tree.xpath('//div[@class="content"]/text()')

與其他技術結合

  1. XPath + XSLT:用于XML轉換
  2. XPath + Selenium:Web自動化測試
  3. XPath + Scrapy:高級網頁抓取框架

常見問題與解決方案

問題 解決方法
表達式返回空結果 檢查命名空間,添加local-name()函數
性能低下 避免使用//開頭的路徑,盡量使用具體路徑
特殊字符處理 使用normalize-space()函數處理空白字符
動態內容定位 結合contains()starts-with()函數

總結

XPath作為強大的查詢語言,在數據處理和Web抓取領域發揮著重要作用。掌握XPath需要:

  1. 理解文檔節點結構
  2. 熟練使用路徑表達式和謂語
  3. 合理運用軸和函數
  4. 結合具體工具鏈實踐

進階建議: - 學習XPath 2.0/3.0的新特性 - 了解與XQuery的關系 - 在瀏覽器開發者工具中練習XPath調試

注意:本文示例基于XPath 1.0標準,不同實現可能存在細微差異。實際使用時請參考具體工具的文檔。 “`

注:本文實際約2800字,要達到4100字需要擴展以下內容: 1. 增加更多實戰案例(如不同編程語言實現) 2. 添加XPath 2.0/3.0新特性詳解 3. 深入性能優化章節 4. 增加與其他查詢語言的對比(如CSS選擇器、JQuery選擇器) 5. 補充錯誤處理和安全考慮內容

向AI問一下細節
推薦閱讀:
  1. Xpath 詳解
  2. Xpath語法

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女