C#操作Xml的兩種方式 XPath XmlDocument XmlNodeList

現有 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章