原創|其它|編輯:郝浩|2009-12-24 11:43:04.000|閱讀 1769 次
概述:今天我要為大家介紹的是XPath,XPath是導航和查詢XML文檔的語言。我們從一個函數開始。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
今天我要為大家介紹的是XPath,XPath是導航和查詢XML文檔的語言。我們從一個函數開始。
UpdateXML()函數
我們已經花了很多時間介紹ExtractValue()函數,但還沒有介紹MySQL的其它XML函數,如UpdateXML(),因為我們先前主要將內容放在將XML文檔中的數據導入到MySQL數據庫中了,UpdateXML()是一個使用不同的XML標記匹配和替換XML塊的函數。
ExtractValue()有兩個字符串參數,一個XML標記,一個XPath表達式。
ExtractValue(xml_frag, xpath_expr)
它返回第一個匹配XPath表達式的文本節點。假設你想將“”變為“”,并將結果保存到一個變量中,下面是使用UpdateXML()函數實現這個目標的做法:
mysql> SELECT @new_xml_node:=UpdateXML('',
-> '//city',
-> '')
-> AS xml_node;
+-----------------------------------------+
| xml_node |
+-----------------------------------------+
| |
+-----------------------------------------+
1 row in set (0.03 sec)
mysql> SELECT @new_xml_node;
+-----------------------------------------+
| @new_xml_node |
+-----------------------------------------+
| |
+-----------------------------------------+
1 row in set (0.00 sec)
如果沒有發現匹配表達式的文本節點,就返回原始XML字符串。
mysql> SELECT @new_xml_node:=UpdateXML('',
-> '//dummy',
-> '')
-> AS xml_node;
+---------------------------+
| xml_node |
+---------------------------+
| |
+---------------------------+
1 row in set (0.03 sec)
如果發現有多個都匹配,會按順序返回每個匹配的子文本節點的內容。
mysql> SELECT @new_xml_node:=UpdateXML('',
-> '//city,
-> '')
-> AS xml_node;
+----------------------------------------------+
| xml_node |
+----------------------------------------------+
| |
+----------------------------------------------+
1 row in set (0.00 sec)
因為UpdateXML()函數在匹配到空元素和沒有匹配之間沒有區別,要區別它們可以使用XPath count()函數測試ExtractValue()的返回。
mysql> SELECT ExtractValue('',
-> 'count(//city)') AS xml_node;
+----------+
| xml_node |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT ExtractValue('',
-> 'count(//county)') AS xml_node;
+----------+
| xml_node |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
錯誤處理
對ExtractValue() 和 UpdateXML(),使用的XPath定位器必須是有效的,被搜索的XML必須是結構良好的,如果定位器無效,則會產生一個錯誤。
mysql> SELECT @new_xml_node:=UpdateXML('',
-> '//city/"state', '') AS xml_node;
ERROR 1105 (HY000): XPATH syntax error: '"state'
如果被搜索的XML結構不好,則會返回null,并產生一個警告。
mysql> SELECT @new_xml_node:=UpdateXML('', '//city',
-> '') AS xml_node;
+----------+
| xml_node |
+----------+
| NULL |
+----------+
1 row in set, 1 warning (0.01 sec)
可以使用show warnings命令顯示警告。
mysql> show warnings;
+---------+------+-----------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------+
| Warning | 1525 | Incorrect XML value: 'parse error at line 1 pos 21: '' unexpected ('' wanted)' |
+---------+------+-----------------------------------+
1 row in set (0.01 sec)
作為第三個參數傳遞給UpdateXML()的替換XML則不會檢查結構。
mysql> SELECT @new_xml_node:=UpdateXML('', '//city',
-> '<>') AS xml_node;
+-------------------------------------------+
| xml_node |
+-------------------------------------------+
| <> |
+-------------------------------------------+
1 row in set (0.00 sec)
在XPath表達式中使用變量
從MySQL 5.1.20開始,可以在XPath定位器參數中使用變量,這樣在傳遞參數時就更加靈活了,根據使用的語法不同,可以對變量實施弱檢查或強檢查。
錯誤處理
對ExtractValue() 和 UpdateXML(),使用的XPath定位器必須是有效的,被搜索的XML必須是結構良好的,如果定位器無效,則會產生一個錯誤。
mysql> SELECT @new_xml_node:=UpdateXML('',
-> '//city/"state', '') AS xml_node;
ERROR 1105 (HY000): XPATH syntax error: '"state'
如果被搜索的XML結構不好,則會返回null,并產生一個警告。
mysql> SELECT @new_xml_node:=UpdateXML('', '//city',
-> '') AS xml_node;
+----------+
| xml_node |
+----------+
| NULL |
+----------+
1 row in set, 1 warning (0.01 sec)
可以使用show warnings命令顯示警告。
mysql> show warnings;
+---------+------+--------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------+
| Warning | 1525 | Incorrect XML value: 'parse error at line 1 pos 21: '' unexpected ('' wanted)' |
+---------+------+--------------------------------------+
1 row in set (0.01 sec)
作為第三個參數傳遞給UpdateXML()的替換XML則不會檢查結構。
mysql> SELECT @new_xml_node:=UpdateXML('', '//city',
-> '<>') AS xml_node;
+-------------------------------------------+
| xml_node |
+-------------------------------------------+
| <> |
+-------------------------------------------+
1 row in set (0.00 sec)
在XPath表達式中使用變量
從MySQL 5.1.20開始,可以在XPath定位器參數中使用變量,這樣在傳遞參數時就更加靈活了,根據使用的語法不同,可以對變量實施弱檢查或強檢查。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載