現有 XML 文件,內容如下:
<? xml version="1.0" encoding="utf-8" ?> < Company > < Department > < Name > IT Department</ Name > < Manager > 豬頭三</ Manager > < Employees > < Employee > < ID code ="001" > 10001</ ID > < Name > 西門慶</ Name > < Gender > 男</ Gender > </ Employee > < Employee > < ID code ="002" > 10202</ ID > < Name > 潘金蓮</ Name > < Gender > 女</ Gender > </ Employee > </ Employees > </ Department > </ Company >
需要取得 Name 爲 “西門慶” 的 Employee 節點,用XPath實現如下:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml " ) ); XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee[@Name='西門慶'] " ); //emp 即爲 定位到的 Employee 節點
需要取得 code 爲 002 的 Employee 節點, 用 XPath 實現如下:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load( Path.Combine( Environment.CurrentDirectory, "demo.xml " ) ); XmlNode emp = xmlDoc.SelectSingleNode( "/Company/Department/Employees/Employee/ID[@code='002']/parent::node() " );
XPath 尋徑簡介
xml文件,是一種樹狀結構, XPath 是針對xml文件尋徑的一種 pattern。以開頭的xml數據爲例,下面給出幾個常用的情形:
- 取得所有的 Employee
/Company/Department/Employees/Employee
XPath的開頭是一個斜線(/)代表絕對路徑
- 取得所有的 Name,不分層次
//Name
XPath 以 // 開頭表示不限層次的一種模式
- 使用 * 匹配未知名稱的元素(不能匹配未知層級)
1. 取得所有的 Employee
/Company/Department/Employees/*
2. 取得Department下,包含有 Employee 作爲子節點的節點
/Company/Department/*/Employee
- 使用 [] 選擇分支
XPath中的元素索引,是從 1 開始的
我們要選擇 第一個 Employee
/Company/Department/Employees/Employee[1]
選擇最後一個Employee
/Company/Department/Employees/Employee[last()]
選擇叫西門慶的Employee
/Company/Department/Employees/Employee[Name='西門慶']
- 多路選擇
XPath 用 | 或者 Or 進行多路選擇
/Company/Deparment/Manager | /Company/Deparment/Name
- 選擇屬性
XPath中的屬性,使用@開頭
選擇所有的 code 屬性
//@code