Xpath[轉]

Xpath[轉]

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。

XPath 是 W3C XSLT 標準的主要元素,并且 XQuery 和 XPointer 同時被構建于 XPath 表達之上。

因此,對 XPath 的理解是很多高級 XML 應用的基礎。

XPath 語法

選取節點

XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿著路徑或者 step 來選取的。

下面列出了最有用的路徑表達式:

表達式描述
nodename選取此節點的所有子節點。
/從根節點選取。
//從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。
.選取當前節點。
..選取當前節點的父節點。
@選取屬性。

實例

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:

路徑表達式結果
bookstore選取 bookstore 元素的所有子節點。
/bookstore

選取根元素 bookstore。

注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book選取屬于 bookstore 的子元素的所有 book 元素。
//book選取所有 book 子元素,而不管它們在文檔中的位置。
bookstore//book選擇屬于 bookstore 元素的后代的所有 book 元素,而不管它們位于 bookstore 之下的什么位置。
//@lang選取名為 lang 的所有屬性。

謂語(Predicates)

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中。

實例

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:

路徑表達式結果
/bookstore/book[1]選取屬于 bookstore 子元素的第一個 book 元素。
/bookstore/book[last()]選取屬于 bookstore 子元素的最后一個 book 元素。
/bookstore/book[last()-1]選取屬于 bookstore 子元素的倒數第二個 book 元素。
/bookstore/book[position()<3]選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素。
//title[@lang]選取所有擁有名為 lang 的屬性的 title 元素。
//title[@lang='eng']選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。
/bookstore/book[price>35.00]選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大于 35.00。
/bookstore/book[price>35.00]/title選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大于 35.00。

選取未知節點

XPath 通配符可用來選取未知的 XML 元素。

通配符描述
*匹配任何元素節點。
@*匹配任何屬性節點。
node()匹配任何類型的節點。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式結果
/bookstore/*選取 bookstore 元素的所有子元素。
//*選取文檔中的所有元素。
//title[@*]選取所有帶有屬性的 title 元素。

選取若干路徑

通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

實例

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式結果
//book/title | //book/price選取 book 元素的所有 title 和 price 元素。
//title | //price選取文檔中的所有 title 和 price 元素。
/bookstore/book/title | //price選取屬于 bookstore 元素的 book 元素的所有 title 元素,以及文檔中所有的 price 元素。

XPath Axes(坐標軸)

XPath 軸

軸可定義相對于當前節點的節點集。

軸名稱結果
ancestor選取當前節點的所有先輩(父、祖父等)。
ancestor-or-self選取當前節點的所有先輩(父、祖父等)以及當前節點本身。
attribute選取當前節點的所有屬性。
child選取當前節點的所有子元素。
descendant選取當前節點的所有后代元素(子、孫等)。
descendant-or-self選取當前節點的所有后代元素(子、孫等)以及當前節點本身。
following選取文檔中當前節點的結束標簽之后的所有節點。
namespace選取當前節點的所有命名空間節點。
parent選取當前節點的父節點。
preceding選取文檔中當前節點的開始標簽之前的所有節點。
preceding-sibling選取當前節點之前的所有同級節點。
self選取當前節點。

位置路徑表達式

位置路徑可以是絕對的,也可以是相對的。

絕對路徑起始于正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割:

絕對位置路徑:

/step/step/...

相對位置路徑:

step/step/...

每個步均根據當前節點集之中的節點來進行計算。

步(step)包括:

軸(axis)
定義所選節點與當前節點之間的樹關系
節點測試(node-test)
識別某個軸內部的節點
零個或者更多謂語(predicate)
更深入地提煉所選的節點集

步的語法:

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

實例

例子結果
child::book選取所有屬于當前節點的子元素的 book 節點。
attribute::lang選取當前節點的 lang 屬性。
child::*選取當前節點的所有子元素。
attribute::*選取當前節點的所有屬性。
child::text()選取當前節點的所有文本子節點。
child::node()選取當前節點的所有子節點。
descendant::book選取當前節點的所有 book 后代。
ancestor::book選擇當前節點的所有 book 先輩。
ancestor-or-self::book選取當前節點的所有 book 先輩以及當前節點(如果此節點是 book 節點)
child::*/child::price選取當前節點的所有 price 孫節點。
posted on 2012-12-14 17:48 夜隼 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/yesun/archive/2012/12/14/2818450.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379053.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】深入分析 ASP.NET Mvc 1.0 – 1. 深入MvcHandler

MvcHandler是一個mvc程序真正開始的地方&#xff0c;因為你可以直接看到并調試它的源碼。 MvcHandler的主要代碼如下:protected internal virtual void ProcessRequest(HttpContextBase httpContext) {AddVersionHeader(httpContext);// Get the controller typestring control…

C++11 右值引用與常量左值引用保存臨時變量(函數返回值)的底層分析

右值引用保存臨時變量&#xff08;函數返回值&#xff09;的問題 &#xff1a;臨時變量是右值 1、普通變量接收函數返回值&#xff1a; 2、右值引用變量接收函數返回值&#xff1a; 3、用const int& 和右值引用是一樣的效果&#xff0c;只是const int& 就不可以修改…

JavaScript中的位置協議屬性

JavaScript | 位置協議屬性 (JavaScript | Location protocol property) A protocol by definition simply implies a set or working rules that must be adhered to. A network protocol thus defines rules for communication between network devices. You must be familia…

axure源文件_Axure教程:實現網易云音樂有聲播放效果

為了方便講解&#xff0c;我們首先在桌面新建一個文件夾&#xff0c;命名為音樂。1、將自己想要演示播放的MP3音樂文件放在這個文件夾里面。2、給播放頁添加一個中繼器&#xff0c;隨便命名&#xff0c;我給它命名為【音樂地址鏈接器】&#xff0c;用來鏈接播放本地音樂文件。并…

2012年終總結

工作&#xff1a; 原來的文章也寫過&#xff0c;今年年初的時候&#xff0c;因為一些原因&#xff0c;成了另外一家公司的員工&#xff0c;但辦公地點還是在原來的公司。 這是一家外包公司&#xff0c;技術實力當然是比較強的&#xff0c;不過自己對于編程方面的興趣止不住的一…

PYTHON解析PE的模塊

RT&#xff0c;從GOOGLE CODE上找的。。雖然拿PYTHON解析PE的意義不大還有點麻煩…… 示例代碼&#xff1a; #coding:gbk import sys import pefile #from struct import * import structdef main():pe pefile.PE("ccalc.exe")pe.print_info()if __name__ "__…

ffplay分析(從啟動到讀取數據線程插入到字幕、音頻、視頻解碼前的隊列操作)

《ffplay的數據結構分析》 《ffplay分析&#xff08;視頻解碼線程的操作&#xff09;》 《ffplay分析&#xff08;音頻解碼線程的操作&#xff09;》 《ffplay 分析&#xff08;音頻從Frame(解碼后)隊列取數據到SDL輸出&#xff09;》 《ffplay分析 &#xff08;視頻從Frame(解…

python3和python2 優勢_python3和python2的區別

1.性能Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間&#xff0c;在字符串和整形操作上可以取得很好的優化結果。Py3.1性能比Py2.5慢15%&#xff0c;還有很大的提升空間。2.編碼Py3.X源碼文件默認使用utf-8編碼&#xff0c;這就使得以下代碼…

并發進程同步

P是荷蘭語Proberen&#xff08;測試&#xff09;的首字母。為阻塞原語&#xff0c;負責把當前進程由運行狀態轉換為阻塞狀態&#xff0c;直到另外一個進程喚醒它。也就是不好的一方面。 V是荷蘭語Verhogen&#xff08;增加&#xff09;的首字母。為喚醒原語&#xff0c;負責把一…

寄存器和pin_16x2 LCD的PIN圖和寄存器

寄存器和pinIn these years the LCD is finding widespread use. It has replaced the LEDs or other multi-segment LEDs.This is due to the following reasons: 近年來&#xff0c; LCD正在廣泛使用。 它已替換LED或其他多段LED&#xff0c;原因如下&#xff1a; The decli…

【Java IO知識】讀取中文亂碼問題解決

讀取文件主要是要設置讀取的輸入流如InputStreamReader時要設置讀取的解碼格式,要和文件本身的編碼格式相同,這樣讀取出來的才不會亂碼。 InputStreamReader reader new InputStreamInputReader(input, "編碼格式"); ANSI是"gbk" 注:必須是在讀取的時候就…

ffplay分析(視頻解碼線程的操作)

《ffplay的數據結構分析》 《ffplay分析&#xff08;從啟動到讀取線程的操作&#xff09;》 《ffplay分析&#xff08;音頻解碼線程的操作&#xff09;》 《ffplay 分析&#xff08;音頻從Frame(解碼后)隊列取數據到SDL輸出&#xff09;》 《ffplay分析 &#xff08;視頻從Fram…

【轉】.NET深入學習筆記(4):深拷貝與淺拷貝(Deep Copy and Shallow Copy)

今天繼續利用準備WSE安全開發文章的空閑時間&#xff0c;完善《.NET深入學習筆記》系列&#xff08;基本都是.Net重要的知識點&#xff0c;我都做了詳細的總結&#xff0c;是什么、為什么、和怎么實現&#xff09;。想必很多人也接觸過這兩個概念。做過C的人對深淺拷貝的概念一…

c語言數組-1_C數組-智能問題與解答

c語言數組-1C programming Arrays (One-D Array, Two-D Array) Aptitude Questions and Answers : In this section you will find C Aptitude Questions and Answers on One Dimensional (1D) and Two Dimensional (2D) array. C編程數組(一維數組&#xff0c;二維數組)能力問…

abap 添加alv上的工具欄的按鈕_Excel里的置頂功能——快速訪問工具欄

100萬職場人都在看后臺回復禮包領199元職場干貨大家好&#xff0c;我是小可~今天跟大家分享一個提高Excel操作效率的小技巧自定義你的快速訪問工具欄設置后的效果▼▼▼也就是把你最經常用到的兩三個功能放到快速訪問工具欄可以一眼就找到這些功能不需要靠快捷鍵或者功能選項卡…

用遞歸法求12+22+...+n2的值

思路分析: 談到遞歸,我個人會聯想到數學里面的通式。因為遞歸調用的函數的對應法則是相同的。例如這道題:f(x)=x。這個就是函數通式,只不過把每個求得的結果進行累加求和即可。用戶輸入5的時候,會出現f(5)=5,之后再進行x減一操作,執行f(4)=4,最后將每個進行累加即可。…

機器學習資料推薦

機器學習資料推薦 機器學習的資料 1:斯坦福大學視頻(作為入門教程&#xff0c;網易有中文字幕&#xff0c;而且講義也有翻譯版本&#xff09;20集200左右講義 2&#xff1a;機器學習 Tom M.Mitchell(雖然出版10多年&#xff0c;但是通俗易懂的內容&#xff0c;讓讀者對機器學習…

ffplay源碼(版本:ffmpeg-4.2.1)

ffplay源碼&#xff08;版本&#xff1a;ffmpeg-4.2.1&#xff09; /** Copyright (c) 2003 Fabrice Bellard** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* Lic…

stringwriter_Java StringWriter toString()方法與示例

stringwriterStringWriter類的toString()方法 (StringWriter Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to represent the buffer current value in terms of string. toStr…

編寫一個函數,計算下式當n=10和n=100的值。

思路分析: 首先,我個人看法:當我拿到這道題的時候,我會把它當成一道數學題對待。分子是動的,恒為一,分母是進行依次增加的。且奇數項為正,偶數項為負。因為設計運算出現的是分數,故,設計選取存儲類型為double。 找出問題: ①正負號問題、②分母問題、③累計求和問題…