XML文件的基本操作(二)

2021-04-21 01:09:46 字數 4306 閱讀 1677

xml 文件物件模型 (dom)

能夠以程式設計方式讀取、處理和修改 xml 文件。

xpath 表示式

xpath 表示式使用路徑表示法(與 url 中使用的路徑表示法類似)定址 xml 文件的各個部分。表示式計算為生成子元素集、布林值、數字或字串型別的物件。

url與xpath 表示式比較

url: 由檔案系統中的資料夾和檔案組成的層次結構。

每個級別具有唯一名稱的檔案。url 總是標識單個檔案。

相對特定資料夾(稱為「當前資料夾」)進行計算。

xpath: 由 xml 文件中的元素和其他元素組成的層次結構。

每個級別的元素名可能不是唯一的。xpath 表示式標識所有匹配的元素集。

相對特定元素(稱為表示式的「上下文」)進行計算。

基本 xpath 表示式 (判斷是誰的集合!!)

1.當前上下文

以句點和正斜槓 (./) 作為字首的表示式明確使用當前上下文作為上下文。例如,以下表示式引用當前上下文中的所有 元素:

./author

注意,此表示式等效於以下表示式:

author

2.文件根

以正斜槓 (/) 為字首的表示式使用文件樹的根作為上下文。例如,以下表示式引用此文件根的 元素:

/bookstore

3.根元素

使用正斜槓後接星號 (/*) 的表示式將使用根元素作為上下文。例如,以下表示式查詢文件的根元素:

/*4.遞迴下降

用雙正斜槓 (//) 的表示式指示可以包括零個或多個層次結構級別的搜尋。如果此運算子出現在模式的開頭,上下文相對於文件的根。例如,以下表示式引用當前文件中任意位置的所有 元素:

//author

.// 字首指示上下文從層次結構中當前上下文所指示的級別開始。

5.特定元素

以元素名開頭的表示式引用特定元素的查詢,從當前上下文節點開始。例如,以下表示式引用當前上下文節點中 元素內的 元素:

以下表示式引用當前上下文節點中 元素內的 元素的集合:

bookstore/book

以下表示式引用當前上下文節點中的所有 元素:

first.name

xpath 表示式是使用下表中所示的運算子和特殊字元構造的。

運算子和特殊字元:

/ 子運算子;選擇左側集合的直接子級。此路徑運算子出現在模式開頭時,表示應從根節點擊擇該子級。

// 遞迴下降;在任意深度搜尋指定元素。此路徑運算子出現在模式開頭時,表示應從根節點遞迴下降。

. 指示當前上下文。

.. 當前上下文節點的父級。

* 萬用字元;選擇所有元素,與元素名無關。

@ 屬性;屬性名的字首。

@* 屬性萬用字元;選擇所有屬性,與名稱無關。

: 命名空間分隔符;將命名空間字首與元素名或屬性名分隔。

( ) 為運算分組,明確設定優先順序。

[ ] 應用篩選模式。

[ ] 下標運算子;用於在集合中編制索引。

+ 執行加法。

- 執行減法。

div 根據 ieee 754 執行浮點除法。

* 執行乘法。

mod 從截斷除法返回餘數。

優先順序   字元   用途

1   ( )   分組

2   [ ]   篩選器

3   / //   路徑運算

分組運算子()僅適用於頂級路徑表示式。

例如:(//author/degree | //author/name) 是有效的分組運算

//author/(degree | name) 不是有效的分組運算

篩選模式運算子 的優先順序高於路徑運算子(/ 和 //)。

例如://comment()[3]

選擇相對於文件中任意位置comment的父級索引等於3的所有comment,可以返回多個備註

(//comment())[3]

選擇相對於父級的所有comment集中的第三個comment,只能返回乙個備註。

author/first-name

當前上下文節點的 元素中的所有 元素。

bookstore//title

元素中更深的一級或多級(任意子代)的所有 元素。注意,此表示式與以下模式 bookstore/*/title 不同。

bookstore/*/title

屬於 元素的孫級的所有 元素。

bookstore//book/excerpt//emph

元素的 子級中的任意位置和 元素中的任意位置的所有 元素:

.//title

當前上下文中更深的一級或多級的所有 元素。注意,本質上只有這種情況需要句點表示法。

萬用字元通過使用萬用字元 * 集合,不使用元素名即可引用元素。* 集合引用作為當前上下文的子級的所有元素,與名稱無關。

例如:author/*

元素的所有元素子級。

book/*/last-name

所有作為 元素的孫級的 元素。

*/*當前上下文的所有孫級元素。

my:book

my 命名空間中的 元素。

my:*

my 命名空間中的所有元素。

屬性xpath 使用 @ 符號表示屬性名。屬性和子元素應公平對待,兩種型別之間的功能應盡可能相當。

例如:@style

當前元素上下文的 style 屬性。

price/@exchange

當前上下文中 元素的 exchange 屬性。

book/@style

所有 元素的 style 屬性。

@*當前上下文節點的所有屬性。

@my:*

my 命名空間中的所有屬性。不包括 my 命名空間中的元素的未限定屬性。

注意:屬性不能包含子元素,所以,如果對屬性應用路徑運算子,將出現語法錯誤。此外,不能對屬性應用索引,因為根據定義,不為屬性定義任何順序。

price/@exchange/total

比較運算子:

and   邏輯與

or   邏輯或

not()   非

=   相等

!=   不相等

<   小於

<=   小於或等於

>   大於

<=   大於或等於

|   集運算;返回兩個節點集的聯合

例如:author[last-name = "bob"]

至少包含乙個值為 bob 的 元素的所有 元素。

author[last-name[1] = "bob"]

第乙個 子元素的值為 bob 的所有 元素。

author/degree[@from != "harvard"]

包含 from 屬性不等於 "harvard" 的 元素的所有 元素。

author[last-name = /editor/last-name]

包含與根元素下 元素中的 元素相同的 元素的所有 元素。

author[. = "matthew bob"]

所有字串值為 matthew bob 的 元素。

集運算union (|) 運算子

|(即 union)運算子返回兩個運算元的聯合,運算元必須是節點集。例如,//author | //publisher 返回的節點集結合了所有 //author 節點和所有 //publisher 節點。

例如:first-name | last-name

包含當前上下文中的 和 元素的節點集。

(bookstore/book | bookstore/magazine)

包含 元素中的 或 元素的節點集。

book | book/author

包含 元素中的所有 元素和所有 元素的節點集。

(book | magazine)/price

包含 或 元素的所有 元素的節點集。

篩選器和篩選模式

通過將篩選子句 [pattern] 新增到集合中,可以對任何集合應用約束和分支。篩選器類似於 sql where 子句。篩選器中包含的模式稱為「篩選模式」。

例如:book[excerpt]

至少包含乙個 元素的所有 元素。

book[excerpt]/title

至少包含乙個 元素的 元素內的所有 元素。

book[excerpt]/author[degree]

至少包含乙個 元素並且在至少包含乙個 元素的 元素內的所有 元素。

book[author/degree]

至少包含乙個 元素並且該元素至少包含乙個 子元素的 所有元素。

book[excerpt][title]

至少包含乙個 元素以及至少包含乙個 元素的 所有元素。

python操作xml文件

最近一直糾結於此問題 現在來個徹底的學習 python中xml.dom 代表的是使用dom解析器解析xml文件 其中使用比較方便的應該是minidom庫了 現在來看看他們的使用方法 使用minidom的parser後產生乙個document object 它包含了解析後的所有的xml文件的資訊 由此...

Jquery 操作xml 文件的方法

需求 頁面上有兩個下拉框,顯示遊戲大區 和遊戲伺服器,當遊戲大區改變時,遊戲伺服器也跟著改變 介面部分html tr class tksiguser th 遊戲大區 th td asp dropdownlist id gamezonedll runat server asp dropdownlist...

XML文件應用C 篇(二)

使用 xmlreader 讀取xml 檔案應用例項 using system using system.collections.generic using system.text using system.xml 記得新增這個系統引用 namespace xmlwriterdemo catch sy...