2017-02-17 8 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> 

私はバージョンに関する情報を抽出したい: これは私の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/">ここに問題があります。デフルトネームスペースが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

です:

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 

(ラン修正XMLに対して、開放剤を固定タグを追加し、欠落している終了タグを追加しました)。

また、抽出液の代わりに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 
関連する問題