powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML в Oracle9i. Примеры разборки
25 сообщений из 239, страница 1 из 10
XML в Oracle9i. Примеры разборки
    #33355543
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Помогите разобраться в разборке XML в Oracle 9i.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
  </DATA>
</RESPONSE>

Есть массив:
v_array_surnames

Как можно вытащить все значения аттбирута с name="SURNAME" сразу в массив? XML у меня типа Xmltype;

Заранее благодарен!
Flukky
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33355597
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select d.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() surname
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
  </DATA>
</RESPONSE>'
      ).extract('RESPONSE/DATA/ENTITY'))) d;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33355746
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, работает очень красиво. Подскажите, пожалуйста, где найти инфрмацию про XMLSequence и Extract (а также другими функциями по обработке XMLType).

Oracle9i XML API Reference - XDK and Oracle XML DB
Release 2 (9.2)
Part VI
XML Database Support: Oracle XML DB for PL/SQL

Тут я что-то не могу найти :/
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33355820
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи рядом, в XML Database Developer's Guide - Oracle XML DB , или просто поиском:
http://www.oracle.com/pls/db92/db92.drilldown?remark=&word=XMLSequence+and+extract
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33355909
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне очень интересно, почему не работает такой запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select d.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() surname
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE xmlns="http://testserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://testserver response.xsd">
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
  </DATA>
</RESPONSE>'
      ).extract('RESPONSE/DATA/ENTITY'))) d;

Запрос остаёться тем же, но в теге <RESPONSE> появились дополнительная информация
Код: plaintext
<RESPONSE xmlns="http://testserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://testserver response.xsd">
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33355916
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis PopovПоищи рядом, в XML Database Developer's Guide - Oracle XML DB , или просто поиском:
http://www.oracle.com/pls/db92/db92.drilldown?remark=&word=XMLSequence+and+extract

Спасибо, попробуем!
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33356054
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации по 9-ке сразу не нашел, а в документации по Oracle10g есть:
http://www.oracle.com/pls/db102/drilldown?remark=quick_search&word=XMLSequence+and+xmlns

Впрочем, работает и в 9i:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select d.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() surname
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE xmlns="http://testserver"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://testserver response.xsd">
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
  </DATA>
</RESPONSE>'
      ).extract(
          'RESPONSE/DATA/ENTITY'
        , 'xmlns="http://testserver"'
      ))) d;

Обрати внимание на выделенную строку.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33358607
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно, например, какой-то функцией удалить всю дополнительную информацию из тега RESPONSE?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33358611
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А конкретно, эту ерудну:
Код: plaintext
1.
2.
3.
xmlns="http://testserver"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://testserver response.xsd"
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33358759
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве одной мысли: если исходный XML окаймить еще одним элементом, т.е. вложить в некий другой XML, то extract(), с учетом исправленного пути, работает и без namespace. Осталось только понять, можно ли это сделать максимально легко. В Oracle10 есть метод XMLType.insertXMLBefore(), но в Oracle 9.2 его еще нет. Хотя, думаю, должны быть и другие варианты, может есть способ получить все namespace'ы из документа?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33358781
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popovможет есть способ получить все namespace'ы из документа?
например, через xmlparser и xmldom:
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96621/adx20ppl.htm#1006936
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33359197
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov Denis Popovможет есть способ получить все namespace'ы из документа?
например, через xmlparser и xmldom:
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96621/adx20ppl.htm#1006936

Что-то похожее я делал в 8 оракле. Это сначала нужно сложить всё в массив, потом в цикле IFами уже вытаскивать по нужным переменным. Это дело может быть долгим.
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33359237
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё вопрос по этой же теме. Возвращается XML в формате <?xml version="1.0" encoding="utf-8" ?>. Как сменить кодировку на windows-1257?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33359733
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Родился ещё один вопрос. Допустим, у нас есть тот же XML, но уже с двумя "пакетами" внутри:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<RESPONSE>
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_002">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="PASSP_NO" value="AAA012345678" />
      <ATTRIBUTE name="ISSUE_DATE" value="01.01.2000" />
    </ENTITY>
  </DATA>
</RESPONSE>

Тоесть есть 2 персоны и только у одной есть пасспорт. Пакеты 001 и 002 связаны по PERS_ID.
Делаю запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
   x1.extract('//ENTITY//ATTRIBUTE[@name="FIRST_NAME"]/@value').getStringVal() as person_name
  ,x1.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() as person_surname
  ,x2.extract('//ENTITY//ATTRIBUTE[@name="PASSP_NO"]/@value').getStringVal() as passport_no
  ,x2.extract('//ENTITY//ATTRIBUTE[@name="ISSUE_DATE"]/@value').getStringVal() as passport_issue_date
from
   table(XMLSequence(v_response_without_passp.extract('RESPONSE/DATA/ENTITY[@name="PACKAGE_001"]'))) x1
  ,table(XMLSequence(v_response_without_passp.extract('RESPONSE/DATA/ENTITY[@name="PACKAGE_002"]'))) x2
where
   extractValue(value(x1),'//ENTITY//ATTRIBUTE[@name="PERS_ID"]/@value') = extractValue(value(x2),'//ENTITY//ATTRIBUTE[@name="PERS_ID"]/@value')

В результате получаем только ту персону, у которой есть пасспорт:
Код: plaintext
1.
2.
3.
4.
person_name = OLGA
person_surname = NOVIKOVA
passport_no = AAA012345678
passport_issue_date =  01 . 01 . 2000 
Как же получить персону, у которой нет пасспорта в таком формате:
Код: plaintext
1.
2.
3.
4.
person_name = ANNA
person_surname = ANTONOVA
passport_no = 
passport_issue_date = 
?

Оператор (+) не работает :(
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33360069
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flukky wrote:
> Что-то похожее я делал в 8 оракле. Это сначала нужно сложить всё в
> массив, потом в цикле IFами уже вытаскивать по нужным переменным. Это
> дело может быть долгим.

Я думал про следующее: через xmldom.getNamespace() получить только этот самый namespace и потом уже
его использовать в extract(). Хотя это получается двойной разбор одного и того же XML. Для
уменьшения накладных расходов Тут можно попробовать еще один вариант: через аналогичный пример,
используя xslprocessor, получить новый XML (раз исходный уже разобран), содержащий минимум требуемых
данных, и потом его уже скормить XMLType.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33360134
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FlukkyРодился ещё один вопрос.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create table tmp_xml (xml XMLType);

insert into tmp_xml (xml) values (XMLType(
'<RESPONSE>
  <DATA REQUEST_ID="111">
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="FIRST_NAME" value="OLGA" />
      <ATTRIBUTE name="SURNAME" value="NOVIKOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_001">
      <ATTRIBUTE name="PERS_ID" value="2222" />
      <ATTRIBUTE name="FIRST_NAME" value="ANNA" />
      <ATTRIBUTE name="SURNAME" value="ANTONOVA" />
    </ENTITY>
    <ENTITY name="PACKAGE_002">
      <ATTRIBUTE name="PERS_ID" value="1111" />
      <ATTRIBUTE name="PASSP_NO" value="AAA012345678" />
      <ATTRIBUTE name="ISSUE_DATE" value="01.01.2000" />
    </ENTITY>
  </DATA>
</RESPONSE>'
));

select p.id
     , max(p.person_surname) person_surname
     , max(p.passport_no) passport_no
     , max(p.passport_issue_date) passport_issue_date
from (select d.extract('//ENTITY//ATTRIBUTE[@name="PERS_ID"]/@value').getStringVal() id
           , d.extract('//ENTITY//ATTRIBUTE[@name="SURNAME"]/@value').getStringVal() person_surname
           , d.extract('//ENTITY//ATTRIBUTE[@name="PASSP_NO"]/@value').getStringVal() passport_no
           , d.extract('//ENTITY//ATTRIBUTE[@name="ISSUE_DATE"]/@value').getStringVal() passport_issue_date
      from tmp_xml t
         , table(XMLSequence(t.xml.extract('RESPONSE/DATA/ENTITY'))) d
     ) p
group by p.id;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33360588
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис, спасибо огромнейшее!

Пока буду пробывать предложенные варианты, задам ещё один вопрос.
Вопрос 1. Часть 1.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA />
    <SYSTEM_ERRORS>
      <ERROR_CODE>BAD_PERSON_ID</ERROR_CODE>
      <ERROR>Incorrect person ID, please check input data</ERROR>
      <ERROR>ORA- 01403 : no data found</ERROR>
      <ERROR>ORA- 20000 : person_id is empty</ERROR>
    </SYSTEM_ERRORS>
</RESPONSE>
Задача сложить значения элементов <ERROR> в массив.

Код: plaintext
1.
2.
select x.extract('/SYSTEM_MESSAGES/ERROR').getStringVal() as errmsg
from   table(xmlsequence(MY_XML)) x;
Такой запрос возвращает значения элементов <ERROR> и сами элементы "<ERROR>" и "</ERROR>". А нужны только значения, т.е. сообщения об ошибках.
Запрос с extractValue() ругается на то, что возвращено более одной строки и я его понимаю :)

Вопрос 1. Часть 2.
Можно ли значения <ERROR> сложить сразу же в виде:
"сообщение1; сообщение2; сообщение3" с помощью XML-парсера?

Спасибо!
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33360719
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Используй text() для вывода значения элемента
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select d.extract('//SYSTEM_ERRORS/ERROR/text()').getStringVal() error
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA>
    <SYSTEM_ERRORS>
      <ERROR_CODE>BAD_PERSON_ID</ERROR_CODE>
      <ERROR>Incorrect person ID, please check input data</ERROR>
      <ERROR>ORA-01403: no data found</ERROR>
      <ERROR>ORA-20000: person_id is empty</ERROR>
    </SYSTEM_ERRORS>
  </DATA>
</RESPONSE>'
      ).extract('RESPONSE/DATA/SYSTEM_ERRORS'))) d;

Второе можно делать разными путями, например:
XMLSequence возвращает тип table of XMLType, к нему е можно привести:
Код: plaintext
1.
2.
3.
4.
create or replace type XML_TABLE as table of XMLType
/
select ...
from table(cast(XMLSequence(...) as XML_TABLE))
Это я к тому, что на основе статьи из FAQ можно написать функцию по соединению полученных записей.


Через XSL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
create table test_xml (xml XMLType);
insert into test_xml (xml) values (XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA>
    <SYSTEM_ERRORS>
      <ERROR_CODE>BAD_PERSON_ID</ERROR_CODE>
      <ERROR>Incorrect person ID, please check input data</ERROR>
      <ERROR>ORA-01403: no data found</ERROR>
      <ERROR>ORA-20000: person_id is empty</ERROR>
    </SYSTEM_ERRORS>
  </DATA>
</RESPONSE>'));

create table test_xsl (xsl XMLType);
insert into test_xsl (xsl) values (XMLType(
'<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no"/>

<xsl:template match="/">
<xsl:for-each select="RESPONSE/DATA/SYSTEM_ERRORS/ERROR">
  <xsl:choose>
    <xsl:when test="position()=1"></xsl:when>
    <xsl:otherwise>;</xsl:otherwise>
  </xsl:choose>
  <xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>'));
commit;

select XMLTransform (
          xml.xml
        , (select xsl from test_xsl)
       ).getStringVal() result
from test_xml xml;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33363591
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov1. Используй text() для вывода значения элемента
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select d.extract('//SYSTEM_ERRORS/ERROR/text()').getStringVal() error
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA>
    <SYSTEM_ERRORS>
      <ERROR_CODE>BAD_PERSON_ID</ERROR_CODE>
      <ERROR>Incorrect person ID, please check input data</ERROR>
      <ERROR>ORA-01403: no data found</ERROR>
      <ERROR>ORA-20000: person_id is empty</ERROR>
    </SYSTEM_ERRORS>
  </DATA>
</RESPONSE>'
      ).extract('RESPONSE/DATA/SYSTEM_ERRORS'))) d;


Да, но в этом случае результат будет:
Код: plaintext
1.
Incorrect person ID, please check input dataORA- 01403 : no data foundORA- 20000 : person_id is empty

А мне бы хотелось его красиво оформить перед этим. Error1; Error2; ...
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33363597
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
"//SYSTEM_ERRORS/ERROR[1]/text()"; "//SYSTEM_ERRORS/ERROR[2]/text()"; "//SYSTEM_ERRORS/ERROR[3]/text()".

Только как я могу узнать, сколько элементов <ERROR> у меня в документе?
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33363794
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flukky wrote:
> А мне бы хотелось его красиво оформить перед этим. Error1; Error2; ...

Тогда действуй как я уже говорил: либо через XSL, либо получай несколько записей и обрабатывай их
собственной процедурой. Но text() все равно придется использовать для получения значения элемента.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33364053
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
либо получай несколько записей и обрабатывай их
собственной процедурой. Но text() все равно придется использовать для получения значения элемента.

Я сделал без text() и без собственной процедуры:
1. Вытащил записи в формате <ERROR>...</ERROR>
2. Спомощью функции Replace заменил эти теги

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select replace(replace(d.extract('//SYSTEM_ERRORS/ERROR').getStringVal(),'<ERROR>',null),'</ERROR>',';') error
from table(XMLSequence(XMLType(
'<?xml version="1.0" encoding="windows-1257" ?>
<RESPONSE>
  <DATA>
    <SYSTEM_ERRORS>
      <ERROR_CODE>BAD_PERSON_ID</ERROR_CODE>
      <ERROR>Incorrect person ID, please check input data</ERROR>
      <ERROR>ORA-01403: no data found</ERROR>
      <ERROR>ORA-20000: person_id is empty</ERROR>
    </SYSTEM_ERRORS>
  </DATA>
</RESPONSE>'
      ).extract('RESPONSE/DATA/SYSTEM_ERRORS'))) d;

Работать работает :)
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33364342
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov Denis Popovможет есть способ получить все namespace'ы из документа?
например, через xmlparser и xmldom:
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96621/adx20ppl.htm#1006936

А как тогда преобразовать мой XMLType в dbms_xmldom.DOMDocument и обратно?

Функция будет выглядеть примерно так:
Код: plaintext
1.
2.
function sweeper(p_xml  in xmltype)
return xmltype;
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33364388
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flukky wrote:
> А как тогда преобразовать мой XMLType в dbms_xmldom.DOMDocument и обратно?

Не знаю, может и никак. Через dbms_xmldom я думал только получить namespace, а потом использовать в
XMLType.extract(), потому и говорил о двойном разборе.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
XML в Oracle9i. Примеры разборки
    #33364578
Flukky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
Через dbms_xmldom я думал только получить namespace, а потом использовать в
XMLType.extract(), потому и говорил о двойном разборе.
Posted via ActualForum NNTP Server 1.3

Функции из пакета xdb.dbms_xmldom:
Код: plaintext
1.
2.
3.
4.
5.
6.
-- 1
PROCEDURE getNamespace(n DOMnode, data IN OUT VARCHAR2);
-- 2
FUNCTION getNamespace(a DOMAttr) return varchar2;
-- 3
FUNCTION getNamespace(elem DOMElement) return varchar2;

Какую из них использовать (DOMnode, DOMAttr, DOMElement), если на входе у меня параметр типа XMLType?
Либо я совсем не в ту степь смотрю?
...
Рейтинг: 0 / 0
25 сообщений из 239, страница 1 из 10
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XML в Oracle9i. Примеры разборки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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