2014-06-24 1 views
0

XML을 사용하여 XML을 구문 분석하는 방법과 같습니다오라클 - XMLTABLE

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <BlockUpload xmlns="http://mftsolutions.com/"> 
     <data><Block xmlns="http://mftsolutions.com/BlockUploader/Block" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://mftsolutions.com/BlockUploader/Block BlockSchema.xsd"> 
    <Header> 
     <Identifier>ID10567</Identifier> 
    </Header> 
</Block></data> 
    </BlockUpload> 
    </soap12:Body> 
</soap12:Envelope> 

내가 요소 식별자 (ID10567)의 값을 얻을 싶어요.

나는 이와 같은 쿼리를 시도했지만 아무런 결과가 없습니다. 아마도 xmlNamespaces 선언에 뭔가 빠졌을 것입니다 :

select h_id 
from test_xml, 
    xmltable(xmlNamespaces (default 'http://mftsolutions.com/BlockUploader/Block' 
          ,'http://mftsolutions.com/' as "mft" 
          ,'http://www.w3.org/2001/XMLSchema-instance' as "xsi" 
          ,'http://www.w3.org/2001/XMLSchema' as "xsd" 
          ,'http://www.w3.org/2003/05/soap-envelope' as "soap12"), 
      '//soap12:Envelope/soap12:Body/BlockUpload/data/Block/Header' 
        PASSING XMLTYPE(xml) 
        COLUMNS 
        h_id VARCHAR2(1000) PATH 'Identifier') 

내가 뭘 놓쳤을까요? 이 쿼리에 대한

샘플 테이블 :

create table test_xml (xml clob); 

insert into test_xml values ('<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Body> 
    <BlockUpload xmlns="http://mftsolutions.com/"> 
     <data><Block xmlns="http://mftsolutions.com/BlockUploader/Block" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://mftsolutions.com/BlockUploader/Block BlockSchema.xsd"> 
    <Header> 
     <Identifier>ID10567</Identifier> 
    </Header> 
</Block></data> 
    </BlockUpload> 
    </soap12:Body> 
</soap12:Envelope>'); 

답변

0

XML 문서의 <BlockUpload> 노드는 "http://mftsolutions.com/"을 네임 스페이스에 속한다. Xpath 표현식에서이 네임 스페이스에 대한 참조가 누락되었습니다. 같은

또한, 문서의 <data> 노드가 암시 적으로 동일한 네임 스페이스에 속하는, 쿼리에 대한 매우 적절한 XPath를 보이게해야합니다

'//soap12:Envelope/soap12:Body/mft:BlockUpload/mft:data/Block/Header' 
+0

당신을 감사 일했다 – user3770485