2013-12-19 36 views
1

你好我有以下XML代碼:如何解析XML文件,並在其上運行

<?xml version="1.0" encoding="UTF-8" standalone="true"?> 

<SeznamOvmIndex> 
<Subjekt> 
<Zkratka>CUZK</Zkratka> 
<ICO>00025712</ICO> 
<Nazev>Český úřad zeměměřický a katastrální</Nazev> 
<AdresaUradu> 
<AdresniBod>25133616</AdresniBod> 
<UliceNazev>Pod sídlištěm</UliceNazev> 
<CisloDomovni>1800</CisloDomovni> 
<CisloOrientacni>9</CisloOrientacni> 
<ObecNazev>Praha</ObecNazev> 
<ObecKod>554782</ObecKod> 
<PSC>18200</PSC> 
<KrajNazev>Hlavní město Praha</KrajNazev> 
</AdresaUradu> 
<Email> 
<Polozka> 
<Typ text="podatelna">2</Typ> 
<Email>[email protected]</Email> 
<Poznamka>Elektronická podatelna ČÚZK</Poznamka> 
</Polozka> 
</Email> 
<TypSubjektu id="11">Orgán státní správy</TypSubjektu> 
<PravniForma type="325">Organizační složka státu</PravniForma> 
<PrimarniOvm>Ano</PrimarniOvm> 
<IdDS>uuaaatg</IdDS> 
<TypDS>OVM</TypDS> 
<StavDS>1</StavDS> 
<StavSubjektu>1</StavSubjektu> 
<DetailSubjektu>http://seznam.gov.cz/ovm/datafile.do?format=xml&service=seznamovm&id=CUZK</DetailSubjektu> 
</Subjekt> 
</SeznamOvmIndex> 

,我試圖提取值我對它們進行操作。我寫了下面的PL/SQL代碼:

DECLARE 
    xmlClob CLOB; 
    xmlFile BFILE; 
    x XMLType; 
    src_offset number := 1 ; 
    dest_offset number := 1 ; 
    lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX; 
    warning integer; 
BEGIN 
    xmlFile := BFILENAME('d:\xml_files', 'example.xml'); 
    DBMS_LOB.CREATETEMPORARY(xmlClob, true); 
    DBMS_LOB.FILEOPEN(xmlFile, DBMS_LOB.FILE_READONLY); 
    DBMS_LOB.LOADCLOBFROMFILE(xmlClob, xmlFile, DBMS_LOB.LOBMAXSIZE, src_offset, 
    dest_offset, DBMS_LOB.DEFAULT_CSID, lang_ctx, warning); 
    x := XMLType.createXML(xmlClob); 
    DBMS_LOB.FILECLOSEALL(); 
    DBMS_LOB.FREETEMPORARY(xmlClob); 
    FOR r IN (
    SELECT ExtractValue(Value(p),'/Subjekt/Zkratka/text()') as kod 
     ,ExtractValue(Value(p),'/Subjekt/AdresaUradu/UliceNazev/text()') as ulice 
     ,ExtractValue(Value(p),'/Subjekt/AdresaUradu/CisloDomovni/text()') as cislo_domovni 
     ,ExtractValue(Value(p),'/Subjekt/AdresaUradu/CisloOrientacni/text()') as cislo_orientacni 
    FROM TABLE(XMLSequence(Extract(x,'/SeznamOvmIndex/Subjekt'))) p 
    WHERE ExtractValue(Value(p),'/Subjekt/Zkratka/text()') = 'CUZK' 
    ) LOOP 
     dbms_output.put_line(r.kod||' '||r.ulice||' '||r.cislo_domovni||'/'||r.cislo_orientacni); 
END LOOP; 
END; 

,但我得到的錯誤: 22285. 00000 - 「不存在的目錄或文件%s的操作」 *原因:試圖訪問一個目錄不存在或嘗試 訪問不存在的目錄中的文件。 *操作:確保數據庫字典中存在與指定的 目錄對應的系統對象,或確保名稱正確。

回答

0

而不是使用BFILENAME('d:\xml_files', 'example.xml'); 必須使用像 BFILENAME('INPUT_DIR', 'example.xml');

使用

select * from dba_directories;一個oracle目錄獲取目錄

CREATE DIRECTORY INPUT_DIR AS 'C:\tempdir';的列表來創建一個目錄。