MySQL / MariaDB命名空间xml使用ExtractValue返回null

时间:2015-01-14 12:34:21

标签: mysql xml xml-namespaces mariadb extract-value

我在MariaDB数据库上有一些xml数据,需要进行一些解析。 我已经尝试使用以下代码来提取一些值,但无论我怎样尝试我都会将null作为输出

SELECT xmlResponse FROM myDataBase.xmlLogging where id = '1' INTO @xml;
SELECT ExtractValue(@xml, 'node2');

还尝试count(node2)尝试确定我的语法中是否存在错误的错误

https://mariadb.com/kb/en/mariadb/documentation/sql-structure-and-commands/functions-and-operators/string-functions/extractvalue/

我的xml结构如下所示,带有namespacess

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns:SMnamespace   xmlns:ns="http://somenamespace.com/WS/">
<ns:Error_spcCode>0</ns:Error_spcCode><ns:Error_spcMessage/>
<ListofData xmlns="http://www.vendor.com/namespeceIO">
    <node1>
        <node2>text</node2>
        <node3>text</node3>
        <node4/>
    </node1>
</ListofData>
</ns:SMnamespace>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>'

2 个答案:

答案 0 :(得分:2)

MySQL / MariaDB不支持xml命名空间。但是,它们支持元素名称中的冒号。

您没有获取节点的原因应该是位置路径中的无效上下文尝试:

SELECT ExtractValue(@xml, '//node2');

使用//启动Xpath表达式意味着文档中的任何节点。

答案 1 :(得分:1)

我找到了这个参考

http://bugs.mysql.com/bug.php?id=51425

似乎我也是如此。我演示的xml是我实际的一个包含相当大的字符串的简化版本。所以,一旦我缩小了字符串大小,我就可以得到一个结果。