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

Откуда:
Сообщений: 361
Ну что за гемор с этим xml.
Кто нибудь знает пакет на оракле который реализует полностью весь стандарт?
Вот например как мне вставить в начало xml документа

<!DOCTYPE DIVITECH_IMPORT_v3_20 SYSTEM EPG32.dtd>

т.е. xml должна начианться как то так
<?xml version=1.0 encoding=UTF-8?>
<!DOCTYPE DIVITECH_IMPORT_v3_20 SYSTEM EPG32.dtd>
....

все остальное я формирую и
<?xml version=1.0 encoding=UTF-8?> через dbms_xmlquery.setEncodingTag(c, 'UTF8'); задаю
но вот как сделать doctype...
из-за этой кодировки пришлось отказаться от dbms_xmlgen
а теперь получается и dbms_xmlquery не подоходит?

как то эта технология на Oracle9.2.0.7 реализована урывками..
Может есть полноценный пакет?
Кто сможет подсказать? М.б. можно и через xmlquery извратиться

ЗЫ. я в xml новичок
20 дек 07, 15:42    [5075648]     Ответить | Цитировать Сообщить модератору
 Re: Какой пакет для XML сумеет это сделать  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Всю жизнь думал, что DOCTYPE, если он есть, должен быть перед всем остальным.
20 дек 07, 21:22    [5077882]     Ответить | Цитировать Сообщить модератору
 Re: Какой пакет для XML сумеет это сделать  [new]
Andrew (First)
Member

Откуда: Север, Югра
Сообщений: 163
Кореец
Ну что за гемор с этим xml.
ЗЫ. я в xml новичок


Я - аналогично, (как в принципе и pl/sql). Но все же. В первой (и пока единстевенной) написаной мною процедуре pl/sql, выгружающей выборки из таблиц в XML я использовал пакет UTL_FILE. Никаких заморочек, что хочешь - то и пишешь.
21 дек 07, 07:31    [5078417]     Ответить | Цитировать Сообщить модератору
 Re: Какой пакет для XML сумеет это сделать  [new]
Кореец
Member

Откуда:
Сообщений: 361
jimmers
Всю жизнь думал, что DOCTYPE, если он есть, должен быть перед всем остальным.


увы. тут другой пример.

..... DOCTYPE declaration added to the result tree would still look like the one produced by the stylesheet and input document above, as shown here:


<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE chapter
  PUBLIC "-//OASIS//DTD DocBook XML//EN" "../dtds/docbookx.dtd">
<chapter><title>Chapter 1</title>
  <para>More unexpert, I boast not: them let those</para>
  <para>Contrive who need, or when they need, not now.</para>
  <para>For while they sit contriving, shall the rest,</para>
  <para>Millions that stand in Arms, and longing wait</para>
</chapter>
21 дек 07, 14:04    [5080787]     Ответить | Цитировать Сообщить модератору
 Re: Какой пакет для XML сумеет это сделать  [new]
Кореец
Member

Откуда:
Сообщений: 361
чувствую придеться в цлобах проделать хирургию.
еще один вопрос, м.. кто знает. Как убрать вот это - "quot;/gt;/lt и т.д."?
это рпоисходит когда есть вложенный xmlelement в другой xmlelement

например
 
select
 xmlelement( "event", 
                                   xmlattributes( v.event_id, v.start_time ) ,
                                   xmlelement("description", 
                                              xmlattributes( v.language_code, v.title, v.short_synopsis ) ) 
                                 )
from v_export_sigula_test v

то в содержимом внутреннего
                                   xmlelement("description", 
                                              xmlattributes( v.language_code, v.title, v.short_synopsis ) ) 
меняет все "" < > на эти quot;/gt;/lt

Раз то спецсиволы xml,можно ли заставить его потом переконвертить уже полученый результат? или вообще избежать такого преобразования?

Там еще перед каждым из quot;/gt;/lt знак & стоит. В посте не получилось их вставить как надо...форум их отображает в виде "" < >.
По идее такой xml тоже должен нормально отработаться но фишка в том что будет делать это внешняя система и как в ней организована поддержка xml одному васе известно
21 дек 07, 14:15    [5080873]     Ответить | Цитировать Сообщить модератору
 Re: Какой пакет для XML сумеет это сделать  [new]
Zloxa
Member

Откуда: СССР ☭
Сообщений: 1033
Сначала на второй вопрос. Искейпинг символов - это стандарт.
Я не понял чем вызвана проблема, видимо, анискейпингом.
Если это так, то:
SQL> 
SQL> select extract(XML,'event/description@LANGUAGE_CODE').getStringVal()
  2         ,extractValue(XML,'event/description@LANGUAGE_CODE')
  3  from (
  4  select
  5   xmlelement( "event",
  6               xmlattributes( 1 event_id, sysdate start_time ) ,
  7               xmlelement("description",
  8                          xmlattributes( '<>:&' language_code, 'title' title, 'short_synopsis' short_synopsis ) )
  9             ) XML
 10  from dual
 11  )
 12  ;
 
EXTRACT(XML,'EVENT/DESCRIPTION                                                   EXTRACTVALUE(XML,'EVENT/DESCRI
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
& lt;& gt;:& amp;                                                                   <>:&
теперь на первый, в свое время тоже долго мучился, иного способа, для девятки - не нашел, если кто знает, поделитесь
SQL> VARIABLE result varchar2(2000);
SQL> declare
  2    XML XMLType;
  3    ADocument_Type varchar2(50) := 'MY_DocType';
  4    cDefaultEncoding     constant varchar2(20) := 'windows-1251';
  5    cDefaultDtdPath      constant varchar2(256) := 'http://external.uri';
  6    cXml_Basic_Transform constant varchar2(2000) := '<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" version="1.0" encoding="' ||
  7                                            cDefaultEncoding ||
  8                                            '" omit-xml-declaration="no" doctype-system="' ||
  9                                            cDefaultDtdPath || ADocument_Type ||
 10                                            '.dtd" /><xsl:template match="*|@*|text()"><xsl:copy><xsl:apply-templates select="*|@*|text()"/></xsl:copy></xsl:template></xsl:stylesheet>';
 11    Parser    Xmlparser.Parser := Xmlparser.Newparser;
 12    Processor Xslprocessor.Processor := Xslprocessor.Newprocessor;
 13    Ss        Xslprocessor.Stylesheet;
 14  begin
 15    select xmlelement( "event",
 16                                 xmlattributes( 1 event_id, sysdate start_time ) ,
 17                                 xmlelement("description",
 18                                            xmlattributes( 'language_code' language_code
 19                                                           , 'title' title
 20                                                           , 'short_synopsis' short_synopsis)))
 21    into XML
 22    from dual;
 23    Xmlparser.Parsebuffer(Parser, Cxml_Basic_Transform);
 24    Ss := Xslprocessor.Newstylesheet(Xmlparser.Getdocument(Parser),null);
 25    Xmlparser.Parseclob(Parser, Xml.Getclobval);
 26    Xslprocessor.Processxsl(Processor
 27                            ,Ss
 28                            ,Xmlparser.Getdocument(Parser)
 29                            ,:result);
 30  end;
 31  /
 
PL/SQL procedure successfully completed
result
---------
<?xml version = '1.0' encoding = 'windows-1251'?>
<!DOCTYPE event SYSTEM "http://external.uriMY_DocType.dtd">
<event EVENT_ID="1" START_TIME="21.12.07"><description LANGUAGE_CODE="language_code" TITLE="title" SHORT_SYNOPSIS="short_synopsis"/></event>
SQL>
21 дек 07, 16:17    [5081828]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить