【问题标题】:MySQL/MariaDB namespaces xml returns null with ExtractValueMySQL/MariaDB 命名空间 xml 使用 ExtractValue 返回 null
【发布时间】:2015-01-14 12:34:20
【问题描述】:

我在 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 结构看起来像这样,带有命名空间

<?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>'

【问题讨论】:

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


    【解决方案1】:

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

    你没有得到节点的原因应该是你的位置路径中的无效上下文尝试:

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

    // 开头的Xpath 表达式表示文档中的任何节点。

    【讨论】:

    • 即使在 XPath 表达式中使用//,我也会得到 null,但我想如果不支持命名空间,它可能会证明返回 null 的原因
    【解决方案2】:

    我找到了这个参考

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

    我的情况似乎也是如此。我演示的 xml 是我的实际版本的更简单版本,其中包含相当大的字符串。所以似乎只要我减小字符串大小,我就能得到结果。

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 2018-12-19
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2017-12-23
      相关资源
      最近更新 更多