2013-07-29 3 views
1
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body> 
    <ShipmentTrackingResponse xmlns="http://ws.aramex.net/ShippingAPI/v1/"> 
    <Transaction xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Reference1>001</Reference1> 
    <Reference2 i:nil="true"/> 
    <Reference3 i:nil="true"/> 
    <Reference4 i:nil="true"/> 
    <Reference5 i:nil="true"/> 
    </Transaction> 
    <Notifications xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/> 
    <HasErrors>false</HasErrors> 
    <TrackingResults xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"   
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/> 
    <NonExistingWaybills xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <a:string>XXXXXXXXXX</a:string> 
    </NonExistingWaybills> 
</ShipmentTrackingResponse> 
</s:Body> 

Извлечение значений из XML в Oracle PL/SQL

Я использовал следующие запросы для извлечения значений, но как я извлечь NonExistingWaybills?

SELECT EXTRACTVALUE(l_resp_xml, 
        '//ShipmentTrackingResponse/Transaction/Reference1', 
        'xmlns="http://ws.aramex.net/ShippingAPI/v1/"') 
    INTO l_response_result 
    FROM dual; 

    DBMS_OUTPUT.put_line ('Result> Reference1=' || l_response_result); 

    SELECT EXTRACTVALUE(l_resp_xml, 
        '//ShipmentTrackingResponse/TrackingResults', 
        'xmlns="http://ws.aramex.net/ShippingAPI/v1/"') 
    INTO l_response_result 
    FROM dual; 

    DBMS_OUTPUT.put_line ('Result> TrackingResults=' || l_response_result); 

    SELECT EXTRACTVALUE(l_resp_xml, 
        '//ShipmentTrackingResponse/NonExistingWaybills', 
        'xmlns="http://ws.aramex.net/ShippingAPI/v1/"') 
    INTO l_response_result 
    FROM dual; 

    DBMS_OUTPUT.put_line ('Result> NonExistingWaybills=' || l_response_result); 

Последний запрос не дает никакого результата ...

+2

Я попробовал это, и он возвращается значение XXXX ВЫБРАТЬ EXTRACTVALUE (XData, '// ShipmentTrackingResponse/NonExistingWaybills/*', « XMLNS =" HTTP: // ws.aramex.net/ShippingAPI/v1/ "') от x – OldProgrammer

+0

Да спасибо большое .. Я решил его увидеть ниже – Novice

ответ

1

Он вернулся результаты ...

SELECT EXTRACTVALUE(l_resp_xml 
        , '//ShipmentTrackingResponse/NonExistingWaybills/node()' 
        , 'xmlns="http://ws.aramex.net/ShippingAPI/v1/"') 
INTO l_response_result 
FROM dual; 
DBMS_OUTPUT.put_line ('Result> NonExistingWaybills=' || l_response_result); 
0

Это будет возвращать один и тот же результат, но без выбора. Я думаю, это то, что вы искали:

l_response_result := l_resp_xml.extract(
    '//ShipmentTrackingResponse/NonExistingWaybills/node()' 
).getstringval(); 
+2

** Из очереди просмотра: ** Могу ли я попросить вас добавить еще какой-нибудь контекст вокруг вашего ответа , Кодовые ответы трудно понять. Это поможет читателю и будущим читателям, если вы сможете добавить дополнительную информацию в свой пост. См. Также [Объяснение полностью основанных на кодах ответов] (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers). –

+0

Только что нашел [здесь] (https://docs.oracle.com/database/121/ADXDB/xdb_xquery.htm#ADXDB5097) это примечание: «До Oracle Database 11g Release 2 некоторые пользователи использовали функции Oracle SQL для извлечения и extractValue, чтобы сделать некоторые из того, что можно сделать лучше, используя функции SQL/XML XMLQuery и XMLCast. SQL-функции extract и extractValue устарели в Oracle Database 11g Release 2. " –

+0

Любопытно, что поведение extract.getstringval() немного отличается от значения extractvalue в том случае, если узел не существует, извлечение возвращает «ORA-30625: отправка метода по аргументу NULL SELF запрещена», тогда как extractvalue возвращает null – Pancho

Смежные вопросы