my $listr = $tree->findnodes_as_string('//ul[@id="brand"]/li/a[@class=~"bd_*?"]'); 可以利用正規表示式來過濾。
程式設計中經常會用到xml,.net framework提供了專門對xml進行處理的dll,裡面提供了很多對xml處理的方法,在這裡簡單介紹一下xpath的使用方法.
xpath 使用路徑表示式來選取 xml 文件中的節點或者節點集.類似於用正規表示式對文字進行目的性匹配.
首先我們寫乙個普通的xml文件
<?xml version="1.0" encoding="utf-8" ?>
1mr sun502
mrs li353
mr zhang20
xpath基本用法
表示式描述
nodename
選取此節點的所有子節點
/從根節點擊取
//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置
.選取當前節點
..選取當前節點的父節點
@選取屬性
在下面的**中,我們已列出了一些路徑表示式以及表示式的結果:
路徑表示式
結果school
選取 school元素的所有子節點
/school
選取根元素 school
注釋:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑!
school/class
選取所有屬於 school的子元素的 class元素。
//class
選取所有 book 子元素,而不管它們在文件中的位置。
school//book
選擇所有屬於 school元素的後代的 class元素,而不管它們位於 school之下的什麼位置。
//@property
選取所有名為 property的屬性。
我們做乙個控制台應用程式,來用xpath操作這個xml:
namespace xpathtest }
} 好了,現在我們需要得到number為1的班級裡的所有資訊:
xmlnodelist list=doc.selectnodes("//class[number=1]"); //獲得xml裡子節點number為1的節點class
console.write(list[0]["number"].name+":"+list[0]["number"].innertext+"\n");
console.write(list[0]["teacher"].name+":"+list[0]["teacher"].innertext+"\n");
console.write(list[0]["student_count"].name+":"+list[0]["student_count"].innertext+"\n");
console.read();
顯示的結果為:
number:1
teacher:mr sun
student_count:50
可能會有朋友說道:我也沒看到**簡單啊,我還不如用while(xmlreader.read())呢.別急,xpath的優勢還沒體現出來
xmlnodelist list = doc.selectnodes("//class[teacher[@property='english']]");//匹配teacher節點裡property為english的class
console.write(list[0]["student_count"].name + ":" + list[0]["student_count"].innertext);
console.read();
顯示的結果:
student_count:35
我們又需要找班級人數不大與40的所有班級資訊:
xmlnodelist list=doc.selectnodes("//class[student_count<40]");//匹配student_count小於40的class
for(int i=0;i
顯示的結果:
匹配的第1個節點資訊:
number:2
teacher:mrs li
student_count:35
匹配的第2個節點資訊:
number:3
teacher:mr zhang
student_count:35
是不是很簡單不需要一次次的遍歷,只需用一句表示式就能得到想要的結果
還有一些xpath的基本語法:
在下面的**中,我們列出了帶有謂語的一些路徑表示式,以及表示式的結果:(謂語是在方括號裡的匹配條件)
路徑表示式
結果/school/class[1]
選取屬於 school子元素的第乙個 class元素。
/school/class[last()]
選取屬於 school子元素的最後乙個 class元素。
/school/class[last()-1]
選取屬於 school子元素的倒數第二個 class元素。
/school/class[position()<3]
選取最前面的兩個屬於 school元素的子元素的 class元素。
//teacher[@property]
選取所有擁有名為 property的屬性的 teacher元素。
//teacher[@property='english']
選取所有 teacher元素,且這些元素擁有值為 english 的 property屬性。
/school/class[student_count>35.00]
選取所有 school元素的 class元素,且其中的 student_count元素的值須大於 35.00。
/school/class[student_count>35.00]/title
選取所有 school元素中的 class元素的 teacher 元素,且其中的 student_count元素的值須大於 35.00。
xpath 萬用字元可用來選取未知的 xml 元素。
萬用字元描述*
匹配任何元素節點
@*匹配任何屬性節點
node()
匹配任何型別的節點
在下面的**中,我們列出了一些路徑表示式,以及這些表示式的結果:
路徑表示式
結果/school/*
選取 school元素的所有子節點
//*選取文件中的所有元素
//property[@*]
選取所有帶有屬性的 property元素。
通過在路徑表示式中使用「|」運算子,您可以選取若干個路徑。
在下面的**中,我們列出了一些路徑表示式,以及這些表示式的結果:
路徑表示式
結果//class/teacher | //class/number
選取所有 class 元素的 teacher 和 number 元素。
//teacher | //number
選取所有文件中
/school/class/teacher | //number
選取所有屬於 school元素的 class元素的 teacher元素,以及文件中所有的 number元素。
Xpath基本用法
定位地圖 driver.find element by xpath text 地圖 多重定位 driver.find element by xpath text 新聞 and name tj trnews 模糊文字查詢 contains text hao 模糊匹配某個屬性 contains name...
xpath基本操作用法
查詢python lxml庫用法 lxml.de from lxml import etree text html初始化,構造乙個xpath解析物件 html etree.html text 通過.tostring 生成乙個修正過的bytes型別的html result etree.tostring...
xpath基本用法初入門
css是一門美化的語言 xpath是一門查詢元素路徑的語言,絕對路徑用單斜槓表示,相對路徑用雙斜槓表示,能用相對路徑,就不要用絕對路徑,相對路徑更加穩定,可讀性更強 路徑也可以右擊copy f12,element 選擇這個元素對應xml,右擊,copy xpath 不建議用,基本不準確 元素的組成 ...