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

Откуда:
Сообщений: 133
Доброго времени суток!
подскажите, пожалуйста, вот строю xml

DECLARE                                                                                                                
    doc  DBMS_XMLDOM.DOMDocument;                                                                                        
    xdata  XMLTYPE;  

CURSOR xmlcur IS   
SELECT XMLROOT (XMLELEMENT("Подтв",
                      XMLATTRIBUTES('бла бла бла' as "xmlns"
                                 , gen_guid as "ИдПодтв"
                                 , 'NameFile' as "ИмяФайла"
                                 , to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss')as "ДатаВремяПроверки"),
                XmlElement("РезПроверки", 
                   XMLATTRIBUTES('01' as "КодРезПроверки"
                                  , 'Ok' as "Пояснение")
                           )                            
      ), version '1.0" encoding="windows-1251')
FROM dual ;  
 
BEGIN           
    OPEN xmlcur;   
         LOOP 
           FETCH xmlcur INTO xdata;
           EXIT WHEN xmlcur%NOTFOUND;
           dbms_output.put_line(xdata.getClobVal);
           --doc := DBMS_XMLDOM.NewDOMDocument(xdata); 
           --DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/NameFile.xml');
         END LOOP;
    CLOSE  xmlcur;                    
END; 


Результат

<?xml version="1.0" encoding="windows-1251"?>
<Подтв xmlns="бла бла бла" ИдПодтв="59850C52-0530-0F6C-E053-0100007FA0F3" ИмяФайла="NameFile" ДатаВремяПроверки="2017-09-19 10:51:21">
  <РезПроверки КодРезПроверки="01" Пояснение="Ok"/>
</Подтв>

Вроде все ок

но вот когда сохраняю его

DECLARE                                                                                                                
    doc  DBMS_XMLDOM.DOMDocument;                                                                                        
    xdata  XMLTYPE;  

CURSOR xmlcur IS   
SELECT XMLROOT (XMLELEMENT("Подтв",
                      XMLATTRIBUTES('бла бла бла' as "xmlns"
                                 , gen_guid as "ИдПодтв"
                                 , 'NameFile' as "ИмяФайла"
                                 , to_char(sysdate , 'yyyy-mm-dd hh24:mi:ss')as "ДатаВремяПроверки"),
                XmlElement("РезПроверки", 
                   XMLATTRIBUTES('01' as "КодРезПроверки"
                                  , 'Ok' as "Пояснение")
                           )                            
      ), version '1.0" encoding="windows-1251')
FROM dual ;  
 
BEGIN           
    OPEN xmlcur;   
         LOOP 
           FETCH xmlcur INTO xdata;
           EXIT WHEN xmlcur%NOTFOUND;
           --dbms_output.put_line(xdata.getClobVal);
           doc := DBMS_XMLDOM.NewDOMDocument(xdata); 
           DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/NameFile.xml');
         END LOOP;
    CLOSE  xmlcur;                    
END; 


xml' ина создается без version '1.0" encoding="windows-1251' и приходится вручную открывать файл и добавлять строчку
<?xml version="1.0" encoding="windows-1251"?>
почему ?

<Подтв xmlns="бла бла бла" ИдПодтв="59850C52-0530-0F6C-E053-0100007FA0F3" ИмяФайла="NameFile" ДатаВремяПроверки="2017-09-19 10:51:21">
  <РезПроверки КодРезПроверки="01" Пояснение="Ok"/>
</Подтв>
19 сен 17, 09:01    [20804933]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по xml  [new]
maxwait
Member

Откуда:
Сообщений: 133
Вроде все, разобрался.
Добавил charset
DBMS_XMLDOM.WRITETOFILE(doc, 'XMLDIR/filename.xml','windows-1251');

и <?xml version="1.0" encoding="windows-1251"?>
вставился в xml
19 сен 17, 09:12    [20804949]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: вопрос по xml  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1639
Почему вместо '<' и '>' '& lt' и '& gt' ?


Connected to Oracle Database 11g Release 11.2.0.1.0 
Connected as supermag@//192.168.1.201/DBOFFICE

SQL> 
SQL> declare
  2    doc DBMS_XMLDOM.DOMDocument;
  3    xdata  XMLTYPE;
  4  begin
  5    for xdata in (
  6        select XMLELEMENT("item",
  7                  XMLELEMENT("article", '123') || chr(13) ||XMLELEMENT("name", 'наме')
  8               ) xml
  9          from dual
 10  
 11        ) loop
 12    doc := DBMS_XMLDOM.NewDOMDocument(xdata.xml);
 13    DBMS_XMLDOM.WRITETOFILE(doc, 'TEMP/NameFile.xml', 'windows-1251');
 14  end loop;
 15  end;
 16  /

PL/SQL procedure successfully completed

SQL> host type c:\temp\NameFile.xml;
SQL> -- че-то не сработало


<?xml version="1.0" encoding="WINDOWS-1251"?>
<item>&lt;article&gt;123&lt;/article&gt;
&lt;name&gt;наме&lt;/name&gt;</item>


Потому что || делает строку, а если в строке встречаются служебные символы, они маскируются.
Правильно:

select XMLELEMENT("item",
                XMLELEMENT("article", '123'), XMLELEMENT("name", 'наме')
             ) xml
27 фев 20, 09:30    [22087899]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по xml  [new]
-2-
Member

Откуда:
Сообщений: 15330
dmdmdm
Потому что ||
Не в первоначальную тему, да и способ демонстрации величия проблемы неявных преобразований с привлечением xml и записи в файл излишне витиеватый.
27 фев 20, 10:23    [22087961]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить