xpath mysql_MySQL中XPath使用详解

今天我要为大家介绍的是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定位器参数中使用变量,这样在传递参数时就更加灵活了,根据使用的语法不同,可以对变量实施弱检查或强检查。

标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

文章转载自:网络转载

a6e1590ae4b228073faff3806334194e.png0

好文不易,鼓励一下吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值