冷风.NET

    ---默默無聞
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

常用的XPATH說明

Posted on 2005-05-28 16:34  冷风.net  阅读(2511)  评论(1编辑  收藏  举报

        今天整理了一下以前用過的XPATH以供大家參考,以下如有不足或錯誤的地方還請各位提出,已便改正。也希望大家能夠將卻少的部份添加進來.
常用的XPATH
表達式
說明
//
表示返回XML文档中的所有符合查找准则的元素,而忽略文档中元素的位置级别
/
表示絕對路徑
News/Links/name
表示相對路徑
./
表示當前節點
../
表示父節點
*
表所所有元素
or
And
其它表達式
=,!=,<,>,>=,<=
Text()
文本
Node()
節點
number last()
last 函数返回一个数字,该数字等於从表达式求值上下文中的上下文大小 (即返回節點個數)
number position()
position函数返回一个数字,该数字等於从表达式求值上下文中的上下文位置(即當前位置)
number count(node-set)
count 函数返回在参数node-set中节点的个数。
node-set id(object)
 
string string(object?)
string 函数将对象依下列各项转换成字符
string concat(string, string, string*)
concat 函数返回它的参数的联结。
boolean starts-with(string, string)
如果第一个字符串参数以第二个字符串参数起头,starts-with 函数返回真,否则,返回假。
boolean contains(string, string)
如果第一个字符串参数包含第二个字符串参数,contains 函数返回真,否则,返回假。
string substring-before(string, string)
substring-before 函数返回第一个字符串参数在第二个参数首次出现之前的子字符串,或者,如果第一个字符串参数不包含第二个字符串参数则返回空字符串。例如,substring-before("1999/04/01","/") 返回 1999。
string substring-after(string, string)
substring-after 函数返回第一个字符串参数在第二个参数首次出现之后的子字符串,或者,如果第一个字符串参数不包含第二个字符串参数则返回空字符串。例如, substring-after("1999/04/01","/") 返回 04/01,而 substring-after("1999/04/01","19") 返回 99/04/01。
string substring( string , number , number? )
substring 函数返回第一个字符串参数从第二个参数所指定的位置开始,以第三个参数为长度的子字符串。例如, substring("12345",2,3) 返回 "234"。如果没有第三个参数,则返回从第二个参数所指定的位置开始直到结束。例如, substring("12345",2) 返回"2345"。
number string-length( string? )
string-length 返回字符串中字符的个数。如果参数省略,则缺省为一个上下文节点再转换成字符串,也就是上下文节点的 字串值。
string normalize-space(string?)
normalize-space 函数返回空白符规范化 后的参数字符串,该规范化是清除领头及结尾的空白字以及用一个空白符替换连续的空白符。空白符字符与 XML 中的产生式 S 所允许的是一样的。如果参数省略,则缺省为一个上下文节点再转换成字符串,也就是上下文节点的 字串值。
string translate(string, string, string)
translate 函数返回第一个参数的字符串,其中有在第二个参数中出现的字符都被在第三个参数中相对应位置的字符所替换。例如,translate("bar","abc","ABC") 返回字符串 BAr。如果,第二个参数里的字符在第三个参数的相对应位置没有字符(因为第二个参数里的字符串比第三个参数的字符串长),那么,第一个参数里的那个字符将被移去。例如,translate("--aaa--","abc-","ABC") 返回 "AAA"。如果在第二个参数里的字符出现超过一次,那么,第一次的出现决定替换的字符。如果第三个参数里的字符串比第二个参数的字符串长, 那么,多余的字符将被忽略。
boolean not(boolean)
如果参数为真 not 函数返回真,否则返回假。
boolean true()
true 函数返回真。
boolean false()
The false 函数返回假。
number number(object?)
number 函数参数依下列各项转换成数字
number sum(node-set)
对於在参数节点集合的每个节点,sum 函数返回节点字串值转换成数字后的和。
number floor(number)
floor 函数返回不大於参数的整数的最大数 (最接近于正无穷大)
number ceiling(number)
ceiling 函数返回不小於参数的整数的最小数 (最接近于负无穷大
number round(number)
round 函数返回最接近于参数的整数。
//*
獲得所有節點
../*
獲得當前節點的父節點的所有節點
//Links
獲得所有的Links節點
//Links[name=”網易”]
獲得子節點name的文本為“網易”的所有Links節點
//Links[@id=”1”]
獲得屬性ID=1的所有Links節點
//*[name=”新浪”]
獲得子節點name的文本為“新浪”的所有節點
//*[@id=”1”]
獲得屬性ID=1的所有節點
//*[@id]
獲得存在屬生ID的所有節點點
//*[name]
獲得存在子節點name的所有節點
//Links[序號]
獲得返回的N個Links節點中的第序號個節點
//Links[1 or 2]
獲得返回的N個Links節點的中第一個和第二個節點
//*[name=”網易” and @id=”1”]
獲得所有子點節name的文本為“網易” 且自己的屬生id=“1”的節點
//text()
選擇所有的正文節點(即葉子節點)
//Links[position()=last()]
獲得返回的N個Links節點中的最後一個節點
等同於//Links[last()]
//*[contains(name,”新”)]
獲得子節點name的文本中包含“新”的所有節點
//Links[1]
獲得返回的N個Links節點中的第一個節點
//Links[1]/name[1]
獲得第一個Links的第一個name節點
//Links//name
獲得所有Links節點下的所有name節點
//*[@id>1]
獲得屬性ID>1的所有節點
//*[number(@id)+1>1]
獲得屬生ID的值加1>1的所有節點
//*[number(text())>1]
獲得文本節點的文本值大於1的所有節點
//*[(number(text()) mode 2)=1]
獲得文本節點的文本值為基數的所有節點

 

/Members/Member/UID[text()="limin"]/parent::*  取得所有子節點UID的文本等於limin的Member節點

/Members/Member[contains(UID,\"limin\") or contains(Email,\"com\")] 取得所有子節點含有limin或子節點email含有com的Member節點

查找最大屬性值的節點(如查找最大ID屬性的節點)

XmlNode maxIDNode = _doc.SelectSingleNode("//Item[not(@id < //Item/@id)]");
or
XmlNode maxIDNode = _doc.SelectSingleNode("//*[not(@id < //Item/@id)]");

查找最大節點值的節點(如查找最大值的ID節點)

XmlNode maxIDNode = _doc.SelectSingleNode("//ID[not(text() < //ID/text())]");