Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
Доброго времени суток, уважаемые форумчане! Написал простенький скрипт, который создаёт объект типа XMLType и затем выводит на консоль значение. Проблема в том, что значение book_id выводится пустое, а должно выводиться 269. Где может скрываться проблема?
29 сен 17, 13:06    [20831518]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
declare
iAppend XMLType;
oAppend schematest.books%ROWTYPE;
begin
  select XMLType(
  '<books>
     <book_id>269</book_id>
     <title>Oracle SQL*Loader</title>
     <author>Jonathan Gennick</author>
  </books>') into iAppend 
  from dual;

   SELECT  BOOK_ID
         , TITLE
         , AUTHOR
   INTO  oAppend.BOOK_ID
         , oAppend.TITLE
         , oAppend.AUTHOR
   FROM XMLTABLE ('/books'--'*'
                  PASSING iAppend
                  COLUMNS   BOOK_ID       number PATH 'book_id/@value'
                          , TITLE       VARCHAR2(4000 CHAR) PATH 'title/@value' 
                          , AUTHOR      VARCHAR2(4000 CHAR) PATH 'author/@value' );
   DBMS_OUTPUT.PUT_LINE(oAppend.BOOK_ID);
 EXCEPTION 
   WHEN NO_DATA_FOUND THEN  DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND');
   WHEN TOO_MANY_ROWS THEN  DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');  
 
end;
29 сен 17, 13:07    [20831520]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
Соответственно таблица books определена так:
29 сен 17, 13:08    [20831524]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
CREATE TABLE SCHEMATEST.books
(
  BOOK_ID  NUMBER,
  TITLE VARCHAR2(4000 CHAR),
  AUTHOR VARCHAR2(4000 CHAR)
)
29 сен 17, 13:08    [20831528]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5422
ultrasonic7,

                  COLUMNS   BOOK_ID       number PATH 'book_id'
                          , TITLE       VARCHAR2(4000 CHAR) PATH 'title' 
                          , AUTHOR      VARCHAR2(4000 CHAR) PATH 'author' );
29 сен 17, 13:15    [20831553]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
AmKad
Member

Откуда:
Сообщений: 4583
ultrasonic7
/@value
Это лишнее.
29 сен 17, 13:15    [20831561]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
env, AmKad, спасибо! Убрал эту последовательность - значения стали извлекаться и выводиться. Я за образец брал кусок стороннего кода. А зачем вообще эта @value может понадобиться?
29 сен 17, 13:23    [20831589]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
Есть вопрос
Member

Откуда:
Сообщений: 144
ultrasonic7,
Это получение атрибута xml-элемента, т.е @author, например это <book author="T.Kyte"></book>
29 сен 17, 13:31    [20831607]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
И в какой книге лучше всего описан парсинг XML средствами Oracle? С записью в таблицы и всё такое. Кроме официальной документации Оракла, конечно) Хочу почитать что-то на русском по этой теме.
29 сен 17, 13:33    [20831617]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в парсинге XML  [new]
ultrasonic7
Member

Откуда:
Сообщений: 38
Есть вопрос , я понял. Так как у меня в xml-ке нет атрибутов, только элементы, то и @value не нужен.
29 сен 17, 13:36    [20831637]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить