2017-02-17 2 views
0

oracle을 사용하여 XML에서 데이터를 추출하려고했습니다.Oracle XML 추출 경로

<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator="XFA2_4" APIVersion="3.6.12227.0"?> 
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/"> 
    <config xmlns="http://www.xfa.org/schema/xci/1.0/"> 
     </agent name="designer"> 
     <destination>pdf</destination> 
     <pdf> 
      <fontInfo /> 
     </pdf> 
     </agent> 
     <present> 
     <pdf> 
      <version>1.65</version> 

I 버전에 대한 정보를 추출 할 : 이 내 XML이다.

Select XMLTYPE (blob_to_clob(datoteka)).extract('//xdp:xdp/config/present/pdf/version/text()','xmlns:xdp="http://ns.adobe.com/xdp/"').getstringval() AS Verzija from datoteka 

결과적으로 null이됩니다. 경로로 "// text()"사용할 때 결과에서 데이터를 얻을 때문에 경로를 문제를 만드는 것 같아요. 이 문제를 해결하는 방법에 대한 도움이 필요합니다. 감사.

답변

2

<config xmlns="http://www.xfa.org/schema/xci/1.0/"> 여기에 문제가 있습니다. Defult 이름 공간이 http://www.xfa.org/schema/xci/1.0/" 으로 변경되었습니다. 추출을로 변경해야합니다.

extract('//xdp:xdp/config/present/pdf/version/text()','xmlns="http://www.xfa.org/schema/xci/1.0/" xmlns:xdp="http://ns.adobe.com/xdp/"') 
+0

이 매우 도움이되었다. 고맙습니다. – acolak

0

게시 한 XML에 오류가 있습니다 (</agent name="designer">). 여기

는 작업 코드

@Arkadiusz 이미 기본 네임 스페이스뿐만 아니라 xdp 포함 할 필요가 언급 한 바와 같이
Select XMLTYPE('<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator="XFA2_4" APIVersion="3.6.12227.0"?> 
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/"> 
    <config xmlns="http://www.xfa.org/schema/xci/1.0/"> 
    <agent name="designer"> 
     <destination>pdf</destination> 
     <pdf> 
     <fontInfo /> 
     </pdf> 
    </agent> 
    <present> 
     <pdf> 
     <version>1.65</version> 
     </pdf> 
    </present> 
    </config> 
</xdp:xdp>').extract('//xdp:xdp/config/present/pdf/version/text()','xmlns="http://www.xfa.org/schema/xci/1.0/" xmlns:xdp="http://ns.adobe.com/xdp/"') 
     .getstringval() AS Verzija 
    from dual 
0

: 수정 된 XML에 대한

select XMLType(blob_to_clob(datoteka)).extract('/xdp:xdp/config/present/pdf/version/text()', 
    'xmlns:xdp="http://ns.adobe.com/xdp/" xmlns="http://www.xfa.org/schema/xci/1.0/').getstringval() 
    as verzija 
from datoteka; 

VERZIJA 
---------- 
1.65 

(실행을, 오프닝 에이전트 고정 태그 및 누락 된 종료 태그 추가).

또한 추출물 대신 XMLQuery와를 사용할 수 있습니다

select XMLQuery('declare namespace xdp="http://ns.adobe.com/xdp/"; (: :) 
    declare default element namespace "http://www.xfa.org/schema/xci/1.0/"; (: :) 
    /xdp:xdp/config/present/pdf/version/text()' 
    passing XMLType(blob_to_clob(datoteka)) 
    returning content) as verzija 
from datoteka; 

VERZIJA 
---------- 
1.65 

당신의 XML 문서가 여러 버전이있을 수 있습니다 경우 당신이 그들 모두를 검색 할위한 XMLTable를 사용할 수 있습니다

select x.verzija 
from datoteka d 
cross join xmltable(xmlnamespaces('http://ns.adobe.com/xdp/' as "xdp", 
    default 'http://www.xfa.org/schema/xci/1.0/'), 
    '/xdp:xdp/config/present/pdf' 
    passing XMLType(blob_to_clob(datoteka)) 
    columns verzija path 'version' 
) x; 

VERZIJA 
---------- 
1.65