2010-09-28 45 views
0

我有這樣的XPath表達式:有助於瞭解XPath的

link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text() 

其實我不懂符號|

+0

好問題(+1)。請參閱我的答案以獲得準確的定義和解釋。 :) – 2010-09-28 20:07:08

回答

-1

XPath中的管道(|)組合表達式。因此,這將返回鏈接元件的任何鏈接的href屬性(相匹配的謂語)和文本內容

所以給喜歡

<link>test</link> 
    <link href="http://www.google.com">Google</link> 
    <link rel="zzzz" href="http://www.stackoverflow.com">Stack Overflow</link> 

片段,你會得到:

test 
http://www.google.com 
Google 
Stack Overflow 
2

符號|是一個工會。它抓取所有匹配左側或右側的元素。

什麼了XPath說的是:

  • 搶到就是有一個屬性「相對=替代」和屬性「類型= text/html的」,或抓住所有的href所有鏈接標籤的href屬性不具備相對鏈接標籤屬性

還搶(因爲聯盟):

  • 抓取網頁上的所有鏈接標籤的內部文本。

一種奇怪的XPath,但它就是這樣。

+0

非常感謝。 – Nikita 2010-09-28 15:08:56

0

Acctually我不明白 符號|

這是XPath union operator

正如W3 XPath 2.0 Spec定義:

•工會和|。相當於運營商 。他們以兩個節點 序列作爲操作數,並返回包含 在任一操作數中出現的所有節點的 序列。

當然,「聯合」(英語單詞)操作者在XPath 2.0和XPath 1.0中我們只有其早先的同義詞,由|字符表示才被加入。

所以,在的特定情況下:

link[@rel='alternate' and @type='text/html' or not(@rel)]/@href | link/text() 

XPath表達式上述選擇的兩組聯合:link[@rel='alternate' and @type='text/html' or not(@rel)]/@href

  1. 所有節點通過選擇

  2. 所有節點,選擇者:link/text()

聯合是套(和數學)理論中的標準操作,雖然符號'U'用於表示聯合那裏。

要從Wikipedia引用定義:

兩組A和B的並集是 集合,其是在A或B中 點(或兩者):

一個簡單的例子

A = {1,2,3,4,5,6} 

B = {1,5,6,7,8} 


A U B = {1,2,3,4,5,6,7,8}