2014-11-06 89 views
-1

我与XmlType将工作在Oracle 11g中,我有这样的标签:如何获取xmltype标签中的名称空间值?

**<ProprietaryId Namespace="CMA_ID">ad017f3a9736ce9d8cbbfc89955aa033 </ProprietaryId>**

我想知道如何获得“命名空间”的信息?

这里是我使用的代码:

SELECT extractvalue(value (sr),'*/ReleaseId/ProprietaryId')as ProprietaryId 
    FROM XML_TABLE X, 
     table(xmlsequence (extract(dados, '*/ContainedReleaseList/Release')))sr 

但我只可以得到标签的信息,而不是名字空间。

回答

0

您需要使用@来指定您需要的值的属性。

下面是一个示例查询。

SQL> with x(y) as (
select '<?xml version="1.0" encoding="UTF-8"?> 
<service_orders count="1"> 
     <ProprietaryId Namespace="CMA_ID">ad017f3a9736ce9d8cbbfc89955aa033 </ProprietaryId> 
</service_orders>' from dual 
) 
select 
    extractvalue(xmltype(y),'service_orders/ProprietaryId/@Namespace') as ProprietaryNamespace 
from 
    x; 

PROPRIETARYNAMESPACE 
----------------------- 
CMA_ID 

但是EXTRACTVALUE已弃用。你可以为此使用XMLTABLE。

SQL> with x(y) as (
select '<?xml version="1.0" encoding="UTF-8"?> 
<service_orders count="1"> 
     <ProprietaryId Namespace="CMA_ID">ad017f3a9736ce9d8cbbfc89955aa033 </ProprietaryId> 
</service_orders>' from dual 
) 
select 
    prop.ProprietaryNamespace 
from 
    x, 
    xmltable('service_orders/ProprietaryId' 
     passing xmltype(x.y) 
     columns ProprietaryNamespace varchar2(20) path '@Namespace' 
     ) prop; 

PROPRIETARYNAMESPACE 
-------------------- 
CMA_ID 
相关问题