Извлечение значения из столбца CLOB XML - PullRequest
0 голосов
/ 07 марта 2019

У меня есть таблица, в которой один из столбцов имеет тип CLOB с данными в формате XML.

Я пытаюсь извлечь значение CreatedByUserID, равное 7934665, в приведенном ниже примере.

Я пытался сделать это с функциями XPATH и extractvalue в Oracle, но по какой-то причине я не получаю результат.

Пробовал одним из следующих способов.xmltype (Column_Name) .extract ('// EventPayloadDetails / ns3: PayloadDetailsList / ns3: PayloadDetail / ns3: key / text ()'). getStringVal ()

В нем указано, что LPX-00601: недопустимый токен в. МожетПожалуйста, помогите мне в этом.

Значение столбца :

<EventPayloadDetails 
  xmlns:bpmn="http://schemas.oracle.com/bpm/xpath" 
  xmlns:ns3="urn:qi.com/EventPayloadDetails"  
  xmlns="urn:qi.com/EventPayloadDetails">
    <ns3:PayloadDetailsList>
        <ns3:PayloadDetail>
            <ns3:key>NUMBER</ns3:key>
            <ns3:value>0014</ns3:value>
        </ns3:PayloadDetail>
        <ns3:PayloadDetail>
            <ns3:key>Dep Num</ns3:key>
            <ns3:value>120</ns3:value>
        </ns3:PayloadDetail>
        <ns3:PayloadDetail>
            <ns3:key>CreatedByUserID</ns3:key>
            <ns3:value>7934665</ns3:value>
        </ns3:PayloadDetail>
        <ns3:PayloadDetail>
            <ns3:key>CreatedByFirstName</ns3:key>
            <ns3:value>M</ns3:value>
        </ns3:PayloadDetail>
        <ns3:PayloadDetail>
            <ns3:key>CreatedByLastName</ns3:key>
            <ns3:value>Ash</ns3:value>
        </ns3:PayloadDetail>
        <ns3:PayloadDetail>
            <ns3:key>Comments</ns3:key>
            <ns3:value>"Review after this 
query"
</ns3:value>
        </ns3:PayloadDetail>
    </ns3:PayloadDetailsList>
</EventPayloadDetails>

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Создан запрос, который берет ваш XML (в части WITH) и выполняет извлечения (прокрутка до конца).

WITH test_table
  AS (SELECT TO_CLOB('<EventPayloadDetails 
     xmlns:bpmn="http://schemas.oracle.com/bpm/xpath" 
     xmlns:ns3="urn:qi.com/EventPayloadDetails"  
     xmlns="urn:qi.com/EventPayloadDetails">
       <ns3:PayloadDetailsList>
           <ns3:PayloadDetail>
               <ns3:key>NUMBER</ns3:key>
               <ns3:value>0014</ns3:value>
           </ns3:PayloadDetail>
           <ns3:PayloadDetail>
               <ns3:key>Dep Num</ns3:key>
               <ns3:value>120</ns3:value>
           </ns3:PayloadDetail>
           <ns3:PayloadDetail>
               <ns3:key>CreatedByUserID</ns3:key>
               <ns3:value>7934665</ns3:value>
           </ns3:PayloadDetail>
           <ns3:PayloadDetail>
               <ns3:key>CreatedByFirstName</ns3:key>
               <ns3:value>M</ns3:value>
           </ns3:PayloadDetail>
           <ns3:PayloadDetail>
               <ns3:key>CreatedByLastName</ns3:key>
               <ns3:value>Ash</ns3:value>
           </ns3:PayloadDetail>
           <ns3:PayloadDetail>
               <ns3:key>Comments</ns3:key>
               <ns3:value>"Review after this 
   query"
   </ns3:value>
           </ns3:PayloadDetail>
       </ns3:PayloadDetailsList>
   </EventPayloadDetails>') as test_data
   from dual)
SELECT XMLTYPE(test_data) xml_data
     , EXTRACTVALUE(
          XMLTYPE(test_data)
         ,'//*/ns3:PayloadDetailsList/ns3:PayloadDetail[ns3:key="CreatedByUserID"]/ns3:value'
         ,'xmlns:ns3="urn:qi.com/EventPayloadDetails"'
       ) value
     , XMLTYPE(test_data).extract(
                             '//*/ns3:PayloadDetailsList/ns3:PayloadDetail[ns3:key="CreatedByUserID"]/ns3:value/text()'
                            ,'xmlns:ns3="urn:qi.com/EventPayloadDetails"'
                          ).getStringVal() value2
  FROM test_table
2 голосов
/ 07 марта 2019

Пожалуйста, попробуйте XPath ниже:

//EventPayloadDetails/ns3:PayloadDetailsList/ns3:PayloadDetail[ns3:key='CreatedByUserID']/ns3:value/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...