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

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
Здравствуйте,
есть код:
DROP TABLE tempxml2;
CREATE TABLE tempxml2 (vagonrow XMLTYPE);

BEGIN
  DELETE FROM tempxml2;
  INSERT INTO tempxml2
  SELECT 
    XMLELEMENT("Emp",
      XMLATTRIBUTES('http://www.example.com/my' AS "xmlns:ss"),
      XMLELEMENT("Dept", XMLATTRIBUTES('String' AS "ss:Type"))) 
  FROM dual;
END;
/

SELECT appendchildxml(vagonrow, 'Emp', xmlelement("Data7", XMLATTRIBUTES('String' AS "Type"),'Три'), 'xmlns:ss=http://www.example.com/my').getstringval()
FROM tempxml2
/

все работает, но только я пытаюсь вставить namespace то вылезает ошибка, что его namespace вроде как нет. с XML почти не работал, понять не могу в чем проблема... Как заставить работать следующий код? добавил ss: перед TYPE, т.к. иначе Excel некорректно воспринимает данные :(

DROP TABLE tempxml2;
CREATE TABLE tempxml2 (vagonrow XMLTYPE);

BEGIN
  DELETE FROM tempxml2;
  INSERT INTO tempxml2
  SELECT 
    XMLELEMENT("Emp",
      XMLATTRIBUTES('http://www.example.com/my' AS "xmlns:ss"),
      XMLELEMENT("Dept", XMLATTRIBUTES('String' AS "ss:Type"))) 
  FROM dual;
END;
/

SELECT appendchildxml(vagonrow, 'Emp', xmlelement("Data7", XMLATTRIBUTES('String' AS "ss:Type"),'ÒÐÈ'), 'xmlns:ss=http://www.example.com/my').getstringval()
FROM tempxml2
/

ORA-31011: сбой разбора XML
ORA-19202: Возникла ошибка при обработке XML 
LPX-00234: префикс пространства имен "ss" не объявлен
Error at line 1
24 янв 13, 10:48    [13819970]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
Up
25 янв 13, 11:24    [13826234]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
mlc
Member

Откуда: Asus Winter Cup
Сообщений: 487
alex-ls,

пример для размышления
Select Appendchildxml(
             Xmltype('<?xml version="1.0" encoding="ISO-8859-1"?>
                       <ers:OPS xmlns:ers="http://www.test.com/schema/ers/v3"
                               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                               xsi:schemaLocation="http://www.test.com/schema/ers/v3">
                      </ers:OPS>')
          , '/ers:OPS'
          , Xmltype('<ers:LOG xmlns:ers="http://www.test.com/schema/ers/v3" TEST="TESTVAL" ></ers:LOG>')
          , 'xmlns:ers="http://www.test.com/schema/ers/v3"'
          ) v_Xmltmp
   From Dual d;
25 янв 13, 12:59    [13827029]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
mlc
Member

Откуда: Asus Winter Cup
Сообщений: 487
alex-ls,

ну а в твоем случае это будет выглядеть как то так
 with tempxml2 as ( SELECT 
    XMLELEMENT("Emp",
      XMLATTRIBUTES('http://www.example.com/my' AS "xmlns:ss"),
      XMLELEMENT("Dept", XMLATTRIBUTES('String' AS "ss:Type"))) vagonrow 
  FROM dual)
  select 
--  *
  xmlroot(appendchildxml(vagonrow, '/Emp', xmlelement("Data7", XMLATTRIBUTES('xmlns:ss=http://www.example.com/my' as "xmlns:ss", 'String' AS "ss:Type")
,'&#210;&#208;&#200;'))
 ,version '1.0'
 )from tempxml2;

xmldoc
--------------------------------------------------------------------------------------------------------------------------------
"<?xml version="1.0"?>
<Emp xmlns:ss="http://www.example.com/my">
  <Dept ss:Type="String"/>
  <Data7 xmlns:ss="xmlns:ss=http://www.example.com/my" ss:Type="String">&amp;#210;&amp;#208;&amp;#200;</Data7>
</Emp>
"
25 янв 13, 13:21    [13827265]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
mlc
Member

Откуда: Asus Winter Cup
Сообщений: 487
mlc,

Вот так будет правильней
 with tempxml2 as ( SELECT 
    XMLELEMENT("Emp",
      XMLATTRIBUTES('http://www.example.com/my' AS "xmlns:ss"),
      XMLELEMENT("Dept", XMLATTRIBUTES('String' AS "ss:Type"))) vagonrow 
  FROM dual)
  select 
  xmlroot(appendchildxml(vagonrow, '/Emp', xmlelement("Data7", XMLATTRIBUTES('xmlns:ss=http://www.example.com/my' as "xmlns:ss", 'String' AS "ss:Type"),'&#210;&#208;&#200;')[FIXED], 'xmlns:ss=http://www.example.com/my'[/FIXED])
 ,version '1.0'
 ) xmldoc from tempxml2;
25 янв 13, 13:23    [13827299]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
mlc
mlc,
Вот так будет правильней
11 фев 13, 08:00    [13906566]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6913
mlc
Вот так будет правильней

случайно нажал ctrl+Enter
Сорри, что долго не отвечал. Такое решение и поставили, но хочется без указания xmlns, не хочется его писать каждый раз или без этого никак?
11 фев 13, 08:02    [13906570]     Ответить | Цитировать Сообщить модератору
 Re: specific namespace в appendchildxml  [new]
mlc
Member

Откуда: Asus Winter Cup
Сообщений: 487
alex-ls
не хочется его писать каждый раз

Каждый раз - это один раз при написании appenchild'a?
11 фев 13, 09:03    [13906689]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить