[英]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.substr和dbms_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.