1

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

2 に答える 2

3

MySQL/MariaDB は xml 名前空間をサポートしていません。ただし、要素名でコロンをサポートしています。

ノードを取得できない理由は、ロケーション パスの無効なコンテキストである必要があります。

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

で始まる Xpath 式//は、ドキュメント内の任意のノードを意味します。

于 2015-01-14T13:00:26.927 に答える