使用Xpath對XML進行模糊查詢

2021-07-01 23:15:55 字數 2696 閱讀 9667

如果要對xml檔案進行模糊查詢的話是乙個比較麻煩的事情,xpath表示式中沒有像檔案系統中的「*」或"?" 或者有像sql表示式中的"%",這樣的模糊查詢的萬用字元。但是還好,在xpath的函式中提供了像contains和match這樣的函式。

contains是乙個字串查詢函式

語法是:fn:contains(string1,string2),表示如果 string1 包含 string2,則返回 true,否則返回 false。

例如:contains('xml','xm'),結果:true。

match是乙個匹配正規表示式的函式

語法是:fn:matches(string,pattern),表示如果 string 引數匹配指定的模式,則返回 true,否則返回 false。

例如:matches("12", "[0-9]"), 結果:true。

對於xpath的一些基礎知識可以參考:biztalk開發系列(三十四) xpath 這樣就可以大概知道如何對xml進行模糊查詢了。以下我們還是按照之前那個例項來做幾個測試。

測試使用的xml

root

>

/p>

<

person 

id="1001"

>

/p>

<

name 

lang

="zh-cn"

>

張城斌name

>

/p>

<

email 

xmlns

="www.quicklearn.cn"

>

[email protected] 

email

>

/p>

<

blog

>

blog

>

/p>

person

>

/p>

<

person 

id="1002"

>

/p>

<

name 

lang

="en"

>

gary zhang

name

>

/p>

<

email 

xmlns

="www.quicklearn.cn"

>

[email protected]

email

>

/p>

<

blog

>

blog

>

/p>

person

>

/p>

root

>

使用工具:xmlspy, 注意之前提到了乙個開源的xpath表示式編輯工具:sketchpath 在執行查詢語句時不能正確的顯示查詢結果。因此建議使用xmlspy做以下測試。

1.查詢所有blog節點值中帶有 cn 字串的person節點

xpath表示式:/root//person[contains(blog,'cn')]

結果:

2.查詢所有blog節點值中帶有 cn 字串並且屬性id值中有01的person節點

xpath表示式:/root//person[contains(blog,'cn') and contains(@id,'01')]

3.查詢受命名空間約束的email節點的值中帶有「live」字串,並且blog節點值中還帶有cn字串。

xpath表示式:/root/person//*[local-name()='email' and contains(text(),'live')]/parent::person

結果:

4.受命名空間約束的節點與不受命名空間約束的節點及屬性的混合查詢

xpath表示式:/root/person//*[local-name()='email' and contains(lower-case(text()),'live')][contains(../blog,'cn')][contains(../name/@lang,'zh-cn')]/parent::person

結果:

5.查詢所有節點中值符合email構造的節點

xpath表示式://*[matches(text(),'\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')]

結果:

通過以上測試,通過使用contrains函式和match函式來進行模糊查詢基本上可以滿足基本的使用需求。另外本篇只是列舉了幾個基本例子,在具體使用的時候還需根據實際的情況靈活運用函式和軸構造xpath表示式以滿足需求。

使用Xpath對XML進行模糊查詢

如果要對xml檔案進行模糊查詢的話是乙個比較麻煩的事情,xpath表示式中沒有像檔案系統中的 或 或者有像sql表示式中的 這樣的模糊查詢的萬用字元。但是還好,在xpath的函式中提供了像contains和match這樣的函式。contains是乙個字串查詢函式 語法是 fn contains st...

xpath對XML進行模糊查詢

試卷xml,因為試卷的選擇題的型別並沒有統一,型別資訊包含在name的字串中,而xml格式是其他人定義的,不能修改,所以要使用xpath進行模糊查詢。contains 是乙個字串查詢函式 語法是 fn contains string1,string2 表示如果 string1 包含 string2,...

C 對XML進行操作

c 操作xml時,要引入命名空間using system.xml 獲取根節點的方法 1 知道根節點名稱 xmlnode root xmldoc.selectsinglenode 根節點名稱 2 不知道根節點名稱 xmlelement root xmldoc.documentelement xml中n...