xpath mysql_MySQL中XPath使用详解_叶子绿绿的的博客
UpdateXML()函数
我们已经花了很多时间介绍ExtractValue()函数,但还没有介绍MySQL的其它XML函数,如
今天我要为大家介绍的是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定位器必须是有效的mysql使用,被搜索的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定位器参数中使用变量,这样在传递参数时就更加灵活了,根据使用的语法不同,可以对变量实施弱检查或强检查。 (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |