选择具有子节点条件的父节点的XML属性

问题描述:

我在数据库中有一个XMLType列,我有一个条件来检查子节点文本并获取父节点的属性。在XML我需要的数量(数量= “3”)进行时,我有的configId(= 5621507)获取选择具有子节点条件的父节点的XML属性

我的SQL:

select 
cfg.session_xml.extract('/ns1:configurationSession/ns1:products/ns1:product/@qty', 
'xmlns:ns1="http://abc.com/schema/service"') 
from vz_cfg2_sess_xml cfg 
where existsNode(cfg.session_xml,'/ns1:configurationSession/ns1:products/ns1:product/[ns1:configId=5621507]')=1; 

我的XML:

<ns1:configurationSession sessionId="3543737" xmlns:ns1="http://abc.com/schema/service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <ns1:products> 
     <ns1:product approvalCode="N" productId="ABC" qty="1"> 
      <ns1:configId>5229719</ns1:configId> 
     </ns1:product> 
     <ns1:product approvalCode="N" productId="DEF" qty="1"> 
      <ns1:configId>5621506</ns1:configId> 
     </ns1:product> 
     <ns1:product approvalCode="N" productId="DEF" qty="3"> 
      <ns1:configId>5621507</ns1:configId> 
     </ns1:product> 
    </ns1:products> 
</ns1:configurationSession> 

为什么不能是这样的:

select 
cfg.session_xml.extract('/ns1:configurationSession/ns1:products/ns1:product[ns1:configId=5621507]/@qty', 
'xmlns:ns1="http://abc.com/schema/service"').getstringval() 
from vz_cfg2_sess_xml cfg 

Here is a sqlfiddle demo

+0

谢谢,这个作品完美。 –