簡體   English   中英

查詢XML CLOB列以獲取該列中的子XML

[英]Query XML CLOB column to get sub XML in the column

我的表中有一個包含XML的CLOB列。 我想在特定標簽到其結束標簽后獲取xml,即

CLOB列中的完整XML

<ParentTag>
 <Location>ABC XYZ ....</Location>
 <Person>
  <Name>Mohsin</Name>
  <Age>23</Age>
 </Person>
</ParentTag>

我想要獲取的是這樣的:

<Person>
  <Name>Mohsin</Name>
  <Age>23</Age>
</Person>

我嘗試使用dbms_lob.substrdbms_lob.getlength,但這無濟於事,因為子XML可能包含<Person>標記,在不同情況下從不同字節開始。

任何幫助將不勝感激。 謝謝

不要嘗試使用子字符串自己解析節點。 Oracle內置了廣泛的XML支持 您可以使用XMLQuery來做到這一點:

select xmlquery('/ParentTag/Person' passing xmltype(xml_clob) returning content)
  as xml_value
from your_table;

XML_VALUE                                                                      
--------------------------------------------------------------------------------
<Person><Name>Mohsin</Name><Age>23</Age></Person>

如果您的XML文檔(在CLOB中)可以具有多個人節點,則可以使用XMLTable來提取它們。

而且,如果您希望它是與顯示的內容匹配的格式化字符串,而不是XML文檔,則可以使用XMLSerialize包裝器調用:

select xmlserialize(content
  xmlquery('/ParentTag/Person' passing xmltype(xml_clob) returning content)
    as varchar2(100) indent size=2) as string_value
from your_table;

STRING_VALUE                                                                   
--------------------------------------------------------------------------------
<Person>                                                                        
  <Name>Mohsin</Name>                                                           
  <Age>23</Age>                                                                 
</Person>

跟進注釋,如果您有命名空間,則可以將其聲明為XPath的一部分

select xmlquery('declare namespace NS4 = "http://soa.comptel.com/2011/02/instantlink"; /ParentTag/NS4:Person'
  passing xmltype(prov_request) returning content) as xml_value
from your_table;

select xmlserialize(content
  xmlquery('declare namespace NS4 = "http://soa.comptel.com/2011/02/instantlink"; /ParentTag/NS4:Person'
      passing xmltype(prov_request) returning content)
    as varchar2(150) indent size=2) as string_value
from your_table;

但是,提取的Person節點仍將具有該名稱空間信息:

STRING_VALUE                                                                   
--------------------------------------------------------------------------------
<NS4:Person xmlns:NS4="http://soa.comptel.com/2011/02/instantlink">             
  <NS4:Name>Mohsin</NS4:Name>                                                   
  <NS4:Age>23</NS4:Age>                                                         
</NS4:Person>

暫無
暫無

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

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