【问题标题】:Extracting value from CLOB XML column从 CLOB XML 列中提取值
【发布时间】:2019-07-29 08:51:52
【问题描述】:

我有一个表,其中一列是 CLOB 类型,其中包含 XML 格式的数据。

我正在尝试提取 CreatedByUserID 的值,在下面的示例中为 7934665。

我尝试在 Oracle 中使用 XPATH 和 extractvalue 函数执行此操作,但由于某种原因我没有得到结果。

尝试了以下方法之一。 xmltype(Column_Name).extract('//EventPayloadDetails/ns3:PayloadDetailsList/ns3:PayloadDetail/ns3:key/text()').getStringVal()

上面写着 LPX-00601: Invalid token in。你能帮我解决这个问题吗?

列值:

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

【问题讨论】:

  • 请向我们展示您尝试过的 XPath 表达式。
  • 尝试了以下方法之一。 xmltype(Column_Name).extract('//EventPayloadDetails/ns3:PayloadDetailsList/ns3:PayloadDetail/ns3:key/text()').getStringVal()
  • 请编辑您的问题,而不是添加其他信息作为评论。

标签: xml oracle xpath


【解决方案1】:

请尝试下面的 XPath:

//EventPayloadDetails/ns3:PayloadDetailsList/ns3:PayloadDetail[ns3:key='CreatedByUserID']/ns3:value/text()

【讨论】:

  • 我想发布相同的答案,但我也收到了LPX-00601: Invalid token
【解决方案2】:

创建了一个查询,它获取您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2012-07-16
    • 2015-09-08
    • 1970-01-01
    • 2015-07-24
    • 2022-07-21
    • 2015-06-12
    • 2023-03-09
    相关资源
    最近更新 更多