剛剛學習了xpath路徑表示式,主要是對xml文件中的節點進行搜尋,通過xpath表示式可以對xml文件中的節點位置進行快速定位和訪問,html也是也是一種類似於xml的標記語言,但是語法沒有那麼嚴謹,在codeplex裡有乙個開源專案htmlagilitypack,提供了用xpath解析html檔案,下面掩飾如何使用該類庫的使用
首先說下xpath路徑表示式
xpath路徑表示式
用來選取xml文件中的節點或節點集的
1、術語:節點(node):7種型別:元素,屬性,文字,命名空間,處理命令,注釋,文件(根)節點
2、節點關係:父(parent),子(children),同胞(sibling),先輩(ancestor),後代(descendant)
3、路徑表示式
nodename 節點名,選取此節點的所有子節點 例: childnode 當前節點中的childnode子節點,不包含孫子及以下的節點
/ 從根節點擊取 例:/root/childnode/grandsonnode
// 表示所有後代節點 例://childnode 所有名為childnode的後代節點
. 表示當前節點 例: ./childnode 表示當前節點的childnode節點
.. 表示父節點 例: ../nearnode 表示父親節點的nearnode子節點
@ 選取屬性 /root/childnode/@id 表示childnode的所有含有id屬性的節點集
4、謂語(predicates)
謂語可以對節點集進行一些限制,使選擇更精確
/root/book[1] 節點集中的第乙個節點
/root/book[last()] 節點集中最後乙個節點
/root/book[position() - 1] 節點集中倒數第二個節點集
/root/book[position() < 5] 節點集中前五個節點集
/root/book[@id] 節點集中含有屬性id的節點集
/root/book[@id='chinese'] 節點集中id屬性值為chinese的節點集
/root/book[price > 35]/title 節點集中book的price元素值大於35的title節點集
5、萬用字元:xpath路徑中同樣支援萬用字元(*,@*,node(), text())
例: /bookstore/*
//title[@*]
6、xpath軸
定義相對於當前節點的節點集
ancestor 所有祖先節點
attribute
所有屬性節點
child 所有子元素
descendant 所有後代節點(子,孫。。。)
following 結束標記後的所有節點
preceding 開始標記前的所有節點
following-sibling 結束標記後的所有同胞節點
preceding-sibling 開始標記前的所有同胞節點
namespace 當前命名空間的所有節點
parent 父節點
self 當前節點
用法:軸名稱::節點測試[謂語]
例: ancestor::book
child::text()
7、運算子
| 兩個節點集的合併 例:/root/book[1] | /root/book[3]
+,-,*,dev,mod
=,!=,,<=,>=
or,and 或和與
//htmlagilitypack類庫用法刪除注釋,script,style
node.descendants()
.where(n => n.name == "
script
" || n.name == "
style
" || n.name=="
#comment")
.tolist().foreach(n =>n.remove());
//遍歷node節點的所有後代節點
foreach(var htmlnode in
node.descendants())
1、首先需要獲取到html頁面資料,可以通過webrequest類來獲取
public2、通過htmldocument類載入html資料static
string gethtmlstr(string
url)
catch
(webexception)
}
string htmlstr = gethtmlstr("也可以通過htmlweb類來獲得htmldocument");htmlagilitypack.htmldocument doc = new
htmlagilitypack.htmldocument();
doc.loadhtml(htmlstr);
htmlnode rootnode = doc.documentnode; //
xpath路徑表示式,這裡表示選取所有span節點中的font最後乙個子節點,其中span節點的class屬性值為num
//根據網頁的內容設定xpath路徑表示式
string xpathstring = "
//span[@class='num']/font[last()]
";
htmlnodecollection aa = rootnode.selectnodes(xpathstring); //
所有找到的節點都是乙個集合
if(aa != null
)
htmlweb web = new補充:htmlweb();
htmlagilitypack.htmldocument doc =web.load(url);
htmlnode rootnode = doc.documentnode;
多個屬性條件查詢 //div[@align='center' and @height='24']
不存在class屬性 //div[not(@class)]
使用GraphEdit使用
1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....
MySQL使用學習使用 mysql學習使用
1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...
學習使用CSDN markdown使用
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...