2015-02-05 3 views
-1

Я работаю над Oracle 11g с пары месяцев, поэтому не хватает опыта, спасибо, что помогли мне в этом. Я пытаюсь прочитать большой XML-файл и получить только 2 значения этого, дело в том, что документ, который я прочитал, очень велик. Итак, позвольте мне объяснить вам, что я делаю:ЭКСТРАКТ XML В ORACLE 11 G ИСПОЛЬЗОВАНИЕ ОПЕРАЦИЙ XMLTYPE

Создание таблицы для хранения XML:

CREATE TABLE xml_table OF XMLType; 

Затем я прочитал документ для получения его в таблицу:

PROCEDURE prc_insertXmlFile(dir VARCHAR2, file VARCHAR2) IS 
BEGIN 
    INSERT INTO xml_table 
    VALUES (XMLType(bfilename(dir, file), 
      nls_charset_id('AL32UTF8'))); 
    COMMIT; 
END; 

сейчас это выдержка из документа (вставка была нормальна):

<?xml version="1.0" encoding="UTF-8"?> 
<Report xsi:schemaLocation="VehicleTripSummary http://lol/someServer?%2lol4%2FVehicleTripSummary&amp;rs%3ACommand=Render&amp;rs%3AFormat=XML&amp;rs%3ASessionID=prfwnw554uqweiz0c45eviftfu5&amp;rc%3ASchema=True" Name="VehicleTripSummary" txtReportTitle="Vista Viaje por Vehículo (Resumen)" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="VehicleTripSummary"> 
    <table1 textbox8="Publicado por:" User_Description="Operaciones qwwwq" textbox5="Grupo de Vehículo:" VehicleGroup_Description="Grupo de Vehiculos-qweqe qweqe." textbox16="Período:" LocalTimestampRange="2015-02-03 00:00 .. 2015-02-03 23:59"/> 
    <tblTripDetails Distance_Abbreviation="Distance(Km)" textbox17="Duración" textbox25="Ultima Conocida Odómetro" Textbox27="Ultima Conocida Hs. Motor" textbox47="Descripción de Vehículo" textbox1="Registro" textbox2="Núm. de Viajes" textbox3="Total" textbox11="Promedio" textbox19="Total" textbox14="Promedio" textbox18="Núm. de Choferes" textbox20="Fecha" textbox24="Lectura" Textbox28="Fecha" Textbox21="Lectura" textbox42="Totales:" textbox44="1987" textbox45="7040" textbox48="287:11:06"> 
    <Detail_Collection> 
     <Detail Vehicle_Description_1="A144 CL149627" Vehicle_Registration="CL149627" NoOfTrips="0" TotalDistance="0" AverageDistance="0" TotalDuration_Description="00:00:00" AverageDuration_Description="00:00:00" NoOfDrivers="0" LastKnownOdometer="2015-01-30 10:02:58" LastKnownOdometerLocalTimestamp="46" Textbox29="--" Textbox31="--"/> 
     <Detail Vehicle_Description_1="A38 CL124335 " Vehicle_Registration="CL124335" NoOfTrips="3" TotalDistance="0" AverageDistance="0" TotalDuration_Description="00:08:03" AverageDuration_Description="00:02:41" NoOfDrivers="0" LastKnownOdometer="2015-02-04 16:13:35" LastKnownOdometerLocalTimestamp="283252" Textbox29="--" Textbox31="--"/> 
. 
. 
. 
    </Detail_Collection> 
    </tblTripDetails> 
</Report> 

сейчас, что я хочу прочитать это, чтобы получить значение Datail/Vehicle_Registration и Datail/TotalDistance. I'm делать это:

SELECT extractValue(OBJECT_VALUE,'/Report/tblTripDetail/Detail_Collection/Detail[1]//Vehicle_Registration') Detalles 
FROM xml_table; 

Но я не мог получить то, что данные, которые я хотел.

Заранее спасибо.

Проверьте это: XMLTYPE OPERATIONS

+0

Пожалуйста, удалите колпачки и покажите нам, что вы получаете, чтобы мы знали, что на самом деле происходит. – cujo

+0

Извините, сэр, на самом деле я просто получаю строку без данных, когда я выполнял запрос. –

ответ

0

Я получил это решение, надеюсь, что это будет полезно для кого-то! х) Проблема с именем XML-пространства, мы должны удалить его, делая это: THE SOLUTION

Затем я получить доступ к данным, мне нужно с этим кодом:

PROCEDURE PRC_PRINCIPAL IS 
    y xmltype; 
    x XMLType := XMLType(bfilename('PRUEBASTALLERXML', 'VehicleTripSummary.xml'), 
      nls_charset_id('AL32UTF8')); 
BEGIN 
    SELECT XMLTRANSFORM(x, x.stylesheet) 
    INTO Y 
    FROM XMLSTYLESHEETS x 
    WHERE x.CODE = 'REMNAM'; 
    FOR r IN (
    SELECT ExtractValue(Value(p),'/Detail/@Vehicle_Registration') as name 


    FROM TABLE(XMLSequence(Extract(y,'/Report/tblTripDetails/Detail_Collection//Detail'))) p 
    ) LOOP 
    htp.p(r.name); 

    END LOOP; 
0
/Report/tblTripDetail/Detail_Collection/Detail[1]//@Vehicle_Registration 
+0

Благодарим за помощь, я до сих пор не получаю данных:/ –

+0

Неплохо, я редактировал путь. Vehicle_Registration - это атрибут, поэтому вам нужно использовать @. – OldProgrammer

+0

Я думаю, что это была другая ошибка. Но все еще нет данных:/Думаешь, это может быть способ, которым я создал таблицу? Потому что я получаю пустую строку –

Смежные вопросы