mysql> SET @xml = '<a><b>X</b><b>Y</b></a>';Query OK, 0 rows affected (0.00 sec)mysql> SET @i =1, @j = 2;Query OK, 0 rows affected (0.00 sec)mysql> SELECT @i, ExtractValue(@xml, '//b[$@i]');+------+--------------------------------+| @i | ExtractValue(@xml, '//b[$@i]') |+------+--------------------------------+| 1 | X |+------+--------------------------------+1 row in set (0.00 sec)mysql> SELECT @j, ExtractValue(@xml, '//b[$@j]');+------+--------------------------------+| @j | ExtractValue(@xml, '//b[$@j]') |+------+--------------------------------+| 2 | Y |+------+--------------------------------+1 row in set (0.00 sec)mysql> SELECT @k, ExtractValue(@xml, '//b[$@k]');+------+--------------------------------+| @k | ExtractValue(@xml, '//b[$@k]') |+------+--------------------------------+| NULL | |+------+--------------------------------+1 row in set (0.00 sec)
mysql> DELIMITER |mysql> CREATE PROCEDURE myproc ()-> BEGIN-> DECLARE i INT DEFAULT 1;-> DECLARE xml VARCHAR(25) DEFAULT '<a>X</a><a>Y</a><a>Z</a>';->-> WHILE i < 4 DO-> SELECT xml, i, ExtractValue(xml, '//a[$i]');-> SET i = i+1;-> END WHILE;-> END |Query OK, 0 rows affected (0.01 sec)mysql> DELIMITER ;mysql> CALL myproc();+--------------------------+---+------------------------------+| xml | i | ExtractValue(xml, '//a[$i]') |+--------------------------+---+------------------------------+| <a>X</a><a>Y</a><a>Z</a> | 1 | X |+--------------------------+---+------------------------------+1 row in set (0.00 sec)+--------------------------+---+------------------------------+| xml | i | ExtractValue(xml, '//a[$i]') |+--------------------------+---+------------------------------+| <a>X</a><a>Y</a><a>Z</a> | 2 | Y |+--------------------------+---+------------------------------+1 row in set (0.01 sec)+--------------------------+---+------------------------------+| xml | i | ExtractValue(xml, '//a[$i]') |+--------------------------+---+------------------------------+| <a>X</a><a>Y</a><a>Z</a> | 3 | Z |+--------------------------+---+------------------------------+1 row in set (0.01 sec)
mysql> SELECT ExtractValue('<a><b/></a>', '/a/b');+-------------------------------------+| ExtractValue('<a><b/></a>', '/a/b') |+-------------------------------------+| |+-------------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue('<a><c/></a>', '/a/b');+-------------------------------------+| ExtractValue('<a><c/></a>', '/a/b') |+-------------------------------------+| |+-------------------------------------+1 row in set (0.00 sec)
mysql> SELECT ExtractValue('<a><b/></a>', 'count(/a/b)');+-------------------------------------+| ExtractValue('<a><b/></a>', 'count(/a/b)') |+-------------------------------------+| 1 |+-------------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue('<a><c/></a>', 'count(/a/b)');+-------------------------------------+| ExtractValue('<a><c/></a>', 'count(/a/b)') |+-------------------------------------+| 0 |+-------------------------------------+1 row in set (0.01 sec)
mysql> SELECT-> ExtractValue('<a>ccc<b>ddd</b></a>', '/a') AS val1,-> ExtractValue('<a>ccc<b>ddd</b></a>', '/a/b') AS val2,-> ExtractValue('<a>ccc<b>ddd</b></a>', '//b') AS val3,-> ExtractValue('<a>ccc<b>ddd</b></a>', '/b') AS val4,-> ExtractValue('<a>ccc<b>ddd</b><b>eee</b></a>', '//b') AS val5;+------+------+------+------+---------+| val1 | val2 | val3 | val4 | val5 |+------+------+------+------+---------+| ccc | ddd | ddd | | ddd eee |+------+------+------+------+---------+
mysql> SELECT ExtractValue('<a>c</a><b', '//a');+-----------------------------------+| ExtractValue('<a>c</a><b', '//a') |+-----------------------------------+| NULL |+-----------------------------------+1 row in set, 1 warning (0.00 sec)mysql> SHOW WARNINGS\G*************************** 1. row ***************************Level: WarningCode: 1525Message: Incorrect XML value: 'parse error at line 1 pos 11:END-OF-INPUT unexpected ('>' wanted)'1 row in set (0.00 sec)mysql> SELECT ExtractValue('<a>c</a><b/>', '//a');+-------------------------------------+| ExtractValue('<a>c</a><b/>', '//a') |+-------------------------------------+| c |+-------------------------------------+1 row in set (0.00 sec)
mysql> SELECT-> UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>') AS val1,-> UpdateXML('<a><b>ccc</b><d></d></a>', '/b', '<e>fff</e>') AS val2,-> UpdateXML('<a><b>ccc</b><d></d></a>', '//b', '<e>fff</e>') AS val3,-> UpdateXML('<a><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val4,-> UpdateXML('<a><d></d><b>ccc</b><d></d></a>', '/a/d', '<e>fff</e>') AS val5-> \G*************************** 1. row ***************************val1: <e>fff</e>val2: <a><b>ccc</b><d></d></a>val3: <a><e>fff</e><d></d></a>val4: <a><b>ccc</b><e>fff</e></a>val5: <a><d></d><b>ccc</b><d></d></a>
mysql> SET @xml = '<a><b><c>w</c><b>x</b><d>y</d>z</b></a>';Query OK, 0 rows affected (0.00 sec)mysql> SELECT @xml;+-----------------------------------------+| @xml |+-----------------------------------------+| <a><b><c>w</c><b>x</b><d>y</d>z</b></a> |+-----------------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue(@xml, '//b[1]');+------------------------------+| ExtractValue(@xml, '//b[1]') |+------------------------------+| x z |+------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue(@xml, '//b[2]');+------------------------------+| ExtractValue(@xml, '//b[2]') |+------------------------------+| |+------------------------------+1 row in set (0.01 sec)mysql> SELECT ExtractValue(@xml, '/descendant-or-self::*/b[1]');+---------------------------------------------------+| ExtractValue(@xml, '/descendant-or-self::*/b[1]') |+---------------------------------------------------+| x z |+---------------------------------------------------+1 row in set (0.06 sec)mysql> SELECT ExtractValue(@xml, '/descendant-or-self::*/b[2]');+---------------------------------------------------+| ExtractValue(@xml, '/descendant-or-self::*/b[2]') |+---------------------------------------------------+| |+---------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue(@xml, '/descendant-or-self::b[1]');+-------------------------------------------------+| ExtractValue(@xml, '/descendant-or-self::b[1]') |+-------------------------------------------------+| z |+-------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT ExtractValue(@xml, '/descendant-or-self::b[2]');+-------------------------------------------------+| ExtractValue(@xml, '/descendant-or-self::b[2]') |+-------------------------------------------------+| x |+-------------------------------------------------+1 row in set (0.00 sec)
文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




