powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как залить XML сложной структуры
25 сообщений из 31, страница 1 из 2
Как залить XML сложной структуры
    #39277444
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Прошу помощи : есть xml файл, размер ~30 М. Структура файла такова, пример записи
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="UTF-8"?>
   
<Файл ИдФайл="F12124545_Z_0003" ВерсФорм="1.0" ТипИнф="ЗАПРОС" ВерсПрог="XXX" xsi:noNamespaceSchemaLocation="VO_8.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Запрос Ид="ECB5" Дата="19.07.2016"/>
 <Персона Ид="7FBDE08730">
   <ПерсИнфо>
      <ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
      <Документ КодВидДок="21" Серия="40 00" Номер="000001"></Документ>
      <Адрес КодСубъекта="78" НеконфАдрес="город Санкт-Петербург, Фрунзенский район" КонфАдрес="Тупик Карла , дом 11, корп. 1, кв. 1" МестоРождения="г.Ленинград"></Адрес>
    </ПерсИнфо>
 <СлужИнфо ВРН="27060">
   <ИДИнфо Код="25" Фирма="2705" Система="2"></ИДИнфо>
   <Наименование Мероприятие="Выборы человека" Субъект="город Санкт-Петербург"></Наименование>
  </СлужИнфо>
 </Персона>
</Файл>



Как залить файл в таблицу Оракла в "разобранном" виде по колонкам "Ид", "Фамилия", "Имя"...."Код" ?
С простой структурой заливки данных, где данные лежат внутри тэгов, (<contact><name>N</name><address>KM Strasse 1</address></contact>) вопросов нет, а как работать со структурой из примера выше?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277455
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||а как работать со структурой из примера выше?Точно также. Примеров полно на форуме. А ты даже не попробовал.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277465
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicXML||а как работать со структурой из примера выше?Точно также. Примеров полно на форуме. А ты даже не попробовал.
примеров полно с обычной структурой, где данные указаны между тэгами. Я не понимаю как разбирать структуру без парсера, где данные указаны в виде
Код: xml
1.
<ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277473
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||,

с помощью XSLT преврати исходный XML в другой, с более удобной структурой. И уже полученный XML заливай в БД известными тебе способами.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277476
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир П.XML||,

с помощью XSLT преврати исходный XML в другой, с более удобной структурой. И уже полученный XML заливай в БД известными тебе способами.

совершенно все запуталось .
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277481
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||где данные указаны в виде
Код: xml
1.
<ФИОД Фамилия="Иванов" Имя="Иван" Отчество="Иванович" ДатаРожд="09.07.1900"></ФИОД>

STFF xmltable атрибут
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277485
Владимир П.полученный XML заливай в БД известными тебе способами.И применяй этот гениальный трюк, из xml более простой xml, несколько раз, пока не поймешь ...
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277517
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сервере в каталоге C:\1\ лежит файл с данными contact.xml

Пробую получить данные так
Код: plsql
1.
2.
3.
4.
 SELECT p.*
       FROM XMLTABLE ('Файл/Запрос/Персона/ПерсИнфо/ФИОД'
                      PASSING xmltype (BFILENAME ('C:\1\', 'contact.xml'), NLS_CHARSET_ID ('CP1251'))
                      COLUMNS F varchar2(50) PATH '@Фамилия') p



получаю ошибку ORA-22285: для операции FILEOPEN задан несуществующий каталог или файл
Есть нюансы в задании имени файла или каталога?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277519
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не, явно какую -то фигню делаю, так я все секции не получу
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277586
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема понята. Сначала нужно залить в таблицу с колонкой xmltype данные из файла.

Код: plsql
1.
2.
3.
4.
INSERT INTO table_with_xml_column (filename, xml_document)
  VALUES ('contact.xml',
          XMLType(bfilename('XMLDIR', 'contact.xml'),                    
          nls_charset_id('AL32UTF8')));



если заливаю файл вида
<?xml version="1.0" encoding="UTF-8"?>
<start>
<contact><contact_name>11</contact_name><address>111113333 </address></contact>
<contact><contact_name>ууууу</contact_name><address>ууууу </address></contact>
</start>

То запрос выполняется без проблем.
При загрузке файла из изначального примера получаю ошибку
Код: sql
1.
2.
3.
4.
5.
SQL Error: ORA-64464: Ошибка события XML
ORA-19202: Возникла ошибка при обработке XML 
In line 3 of orastream:
LPX-00217: invalid character 54496 (U+D4E0)
64464. 00000 -  "XML event error"



В чем может быть проблема загрузки данных?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277593
XML||,
в некорректном заполнении третьей строки xml
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277680
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
элементарно, ватсонXML||,
в некорректном заполнении третьей строки xml

а что не так ? Предварительно все создано CREATE DIRECTORY XMLDIR AS 'C:\1\';
Думаю что дело в не третьей строке, так как другой файл по структуре подгрузился.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277688
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема была в кодировке
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277690
Фа в 1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot XML||]элементарно, ватсонДумаю что дело в не третьей строке, так как другой файл по структуре подгрузился.Что сущуствуют другтие файлы без ошибки в третьей строкн никто не сомневается.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277763
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос такого плана
Код: plsql
1.
2.
3.
4.
5.
SELECT * FROM
      XMLTABLE ('/Персона/ПерсИнфо/ФИОД'
PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns F varchar2(50) path 'Фамилия'
)


Возвращает ноль строк. Почему?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277767
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277770
иксымыль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML||Запрос такого плана
Код: plsql
1.
2.
3.
4.
5.
SELECT * FROM
      XMLTABLE ('/Персона/ПерсИнфо/ФИОД'
PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns F varchar2(50) path 'Фамилия'
)


Возвращает ноль строк. Почему?
Потому что
Код: plsql
1.
'/Запрос/Персона/ПерсИнфо/ФИОД'
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277778
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||Почему?Потому что ты не желаешь учиться. Методом тыка только дети рождаются.
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277782
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос возвращает данные
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
       XMLTABLE ('Файл/Персона/ПерсИнфо/ФИОД'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 F  varchar2(50) path '@Фамилия'
)


А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277790
FLOWR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML||А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
Зависит от того, что надо получить в итоге.
Причем сильно зависит.
Чти XML Developer Guide из штатного комплекта документации, там много примеров.
Другой вариант - если типа сам себе умный - загугли ключевые слова XML FLOWR и твори.
Творение размещай в первом параметре xmltable вместо xpath
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277821
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, получилось разобрать файл целиком, правда, не за один проход.
Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
двумя запросами получается, а одним - нет
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277826
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XML||Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
Код: plsql
1.
'..'
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277849
XML||Запрос возвращает данные
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
       XMLTABLE ('Файл/Персона/ПерсИнфо/ФИОД'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 F  varchar2(50) path '@Фамилия'
)


А как сюда же добавить данные из других блоков "СлужИнфо" и "Документ" ?
....
Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
двумя запросами получается, а одним - нет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT * FROM
       XMLTABLE ('Файл'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 Z  varchar2(10) path '/Запрос@Ид'
...
 F  varchar2(50) path '/Персона/ПерсИнфо/ФИОД@Фамилия'
...
 D  varchar2(50) path '/Персона/ПерсИнфо/Документ@КодВидДок'
...
 SI varchar2(50) path '/СлужИнфо@ВРН'
...
)
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277852
даже я уже понял
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT * FROM
       XMLTABLE ('Файл'
      PASSING XMLTYPE ( BFILENAME ( 'XMLDIR', 'F.xml' ) , NLS_CHARSET_ID ( 'UTF8' ) )
columns 
 Z  varchar2(10) path '/Запрос@Ид',
...
 F  varchar2(50) path '/Персона/ПерсИнфо/ФИОД@Фамилия',
...
 D  varchar2(50) path '/Персона/ПерсИнфо/Документ@КодВидДок',
...
 SI varchar2(50) path '/СлужИнфо@ВРН',
...
)
...
Рейтинг: 0 / 0
Как залить XML сложной структуры
    #39277870
XML||
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicXML||Не понимаю как получить данные из тэгов <Запрос> в одном запросе с разбором <Файл/Персона>
Код: plsql
1.
'..'



Это опробовано, получаю
ORA-19110: неподдерживаемое выражение XQuery
19110. 00000 - "unsupported XQuery expression"
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как залить XML сложной структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]