簡體   English   中英

MySQL的ExtractValue

[英]ExtractValue with MySQL

我正在嘗試從XML輸出中提取用戶名值,該XML輸出已加載到數據庫列(file_output)中。 我的查詢返回一個空值,但未達到我的預期。 感謝您的幫助。

XML輸出:

    <soap:Envelope xmlns:ones="http://onesource.gmtorque.com" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <soap:Header>
        <wsse:Security>
          <wsse:UsernameToken>
            <wsse:Username>username_prod</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
          </wsse:UsernameToken>
        </wsse:Security>
      </soap:Header>
</soap:Envelope>

查詢:

SELECT DISTINCT 
RR.file_output
ExtractValue (file_output, '/soap:Envelope/soap:Header/wsse:Security/wsse:UsernameToken/wsse:Username') AS"Username"
FROM schema.Records
WHERE create_DTM >'2015-10-25';

預期值為username_prod

您擁有的XML示例格式錯誤,因為它缺少</soap:Envelope>標記。

SQL小提琴

您遇到的問題是MySQL的錯誤。 您嘗試解析的XML很可能太長。 我非常確定它與以下錯誤有關: https : //bugs.mysql.com/bug.php?id=62429 要解決此錯誤,您可以僅提取要導航的XML部分,也可以使用另一種方法提取要查找的值。 無論如何,我選擇的解決方案是提取您試圖通過XPath導航的XML,並使用您提供的XPath查詢提取結果。

SELECT DISTINCT RR.consumer_ID
    , RR.file_output
    , RR.response_message
    , RR.external_ID
    , RR.create_DTM
    , E.client_license_ID
    , ExtractValue(CONCAT(LEFT(RR.file_output, (INSTR(LEFT(RR.file_output,1000), "</soap:Header>") + 14)),"</soap:Envelope>"), '//wsse:Security/wsse:UsernameToken/wsse:Username') AS Username
FROM kettle_data_transfer.Records RR
    JOIN kettle_data_transfer.Event_Mappings EM ON RR.event_mapping_ID = EM.event_mapping_ID AND RR.data_transfer_ID = EM.data_transfer_ID
    JOIN efn.Events E on EM.event_ID = E.event_ID
WHERE 0=0
    AND RR.data_transfer_ID = 43
    AND RR.failure_code = 0
    AND RR.mode = 'production'
    AND RR.`ignore` = 0
    AND RR.create_DTM > '2015-10-25';

無論如何,那應該可以解決您的問題。

甚至我也遇到了同樣的問題。

但是,如果您不滿意使用“提取所需xml的一部分”,則可以轉換到MYSQL Server 5.6或更高版本。 該問題/錯誤已在5.6及更高版本中修復。

那應該解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM