UpdateXML Oracle #262759


#0 by zhmur
Если кто то сталкивался то подскажите пути решения следующей проблемы. В базе Oracle 10gR2 хранится XML в CLOB т.е. не структурированный. Все нормально пока не пытаешься применить к XML функцию UpdateXML или подобные. После этого оракл "форматирует" весь XML. И получается вот что: До <a>Text1<b>Text2</b></a> После <a>Text1  <b>Text2</b> </a> Это неедопустимо для нашего приложения (и вообще говоря не верно) Есть ли мнения как "отключить форматирование?
#1 by asady
убери возврат каретки и будет тебе неформатированный XML
#2 by zhmur
Тупой вопрос: как?
#3 by zhmur
И дело даже не в переносе каретки, а в том что он туда добавляет пробелы лишние. Я привёл очень просто пример но на самом деле это происходит в XML файлах объемом 600 килобайт и больше.
#4 by asady
поиск в СП по ключевой фразе "Последовательный доступ к тексту"
#5 by zhmur
ээээ в оракле? :)
#6 by Ангел-Хоронитель
вопрос-то вроде как не по 1С.....
#7 by asady
напиши свой парсер для этого или воспользуйся готовыми типо oxigenxml там кода строк на 20-30 будет.
#8 by Мяв-Мяв
должны быть не пробелы, а знаки табуляции. посмотри внимательнее.
#9 by zhmur
Это не меняет трагизма ситуации.
#10 by Мяв-Мяв
а в чем трагизм-то? любой парсер плевать хотел и на возвраты и на табуляторы. кроме того это - совершенно нормальный вид XML.
#11 by zhmur
Так. По спецификации все что хранится после <a> до <b> считается текстом. Со всеми вытекающими последствиями. Именно поэтому ни альтова ни любой другой редактор или паресер никогда не разбивают подобные конструкции.
#12 by Мяв-Мяв
конечно. как текст оно и отражается. все что от открытия "а" и до открытия "b" создаю новый XML файл. Добавляю корневой элемент. внутрь элемента добавляю твою строчку "<a>Text1<b>Text2</b></a>". Сохраняю. все имеющиеся у меня вьюеры и редакторы показывают это как "  <?xml version="1.0" encoding="utf-8" ?> - <root> - <a>  Text1  <b>Text2</b>  </a>  </root> " хотя на самом деле ни переводов ни табуляторов нет. при перезаписи файла редактором переводы и табуляторы появляются. Отображение не изменяется.
#13 by Мяв-Мяв
смеху ради понатыкал табуляторов и пробелов вразнобой. добавил переводов и возвратов каретки. нафигачил пустых строк. отображение не меняется.
#14 by Лефмихалыч
(12,13) отображение не меняется от того, что в майкрософт интернет испортил'е есть встроенный XSLT, который делает Trim для значений элементов и вставляет переводы
#15 by Мяв-Мяв
чё?
#16 by Лефмихалыч
какое именно слово тебе не понятно?
#17 by Мяв-Мяв
словосочетние "майкрософт интернет испортил'е" что это такое и как оно влияет на отображение структуры xml файла в kxmleditor например.
#18 by Лефмихалыч
По первому пункту: "майкрософт интернет испортил" = MS Internet Explorer. по второму: два варианта, либо kxmleditor использует для визуализации IWebBrowser2, либо - такойже (аналогичный) XSLT
#19 by Лефмихалыч
про IWebBrowser2 - лажа, kxmleditor оказывается для KDE. Значит - второй вариант - такой же XSLT, который обрубает пробелы
#20 by Мяв-Мяв
пошел нашел компутер с виндовсом. в самом деле - отображает точно так же. и что характерно - майкрософтовский парсертоже говорит, что то, что от a до б - текст. Так что может на самом деле все равно, есть в xml файле табуляторы или нет? если и с ними и без них он парсится одинаково?
#21 by Лефмихалыч
за отображение XML в броузере отвечает таблица преобразований XSLT. При этом, значение, которое отображает браузер может отличаться от значения, содержащегося в XML, таким образом, автор прав в своем негодовании о том, что вместо XML документа, он получает ПРЕДСТАВЛЕНИЕ его после вызова UpdateXML. Я вот об этом говорил
#22 by Лефмихалыч
к слову, может в описании метода UpdateXML и подобных указано, что они возвращают ПРЕДСТАВЛЕНИЕ? Если - да, то тут ты сам виноват - не те методы вызываешь
#23 by Мяв-Мяв
наплюй на представление. xml совершенно равнодушен к знакам форматирования. UpdateXML "returns an XMLType instance with the updated value" после вызова автор получает валидный xml, абсолютно тождественный первоначальному, отформатированый для удобства чтения при отсутствии парсинга. Вот об этом я и говорил.
#24 by Лефмихалыч
да не тот же он получает документ, а уже другой - у него трагедия в том, что пробелов в значениях элементов должно быть столько, чтолько было до UpdateXML. Видать, самопальный парсер какой-то потом ни чего понять не может...
#25 by Мяв-Мяв
и это тоже понятно. формально он другой.  но фактически (как xml) - тот же самый. но он уверен, что "это неправильно" и вместо того чтоб исправить свою самоделку сейчас будет тиранить оракл. вот залезет в доку, и увидит, что у функции 4 аргумента. и будет рыть дальше.
#26 by zhmur
Всем спасибо. Проблема решена. Когда не используется XMLType  и преобразование осуществляется на лету разметка не вставляется. Причём исправлено это только в релизе 2. Что то я смотрю тут всё обсуждение свелось к тому зачем мне это надо :)
#27 by Мяв-Мяв
ну хотя ты и не сказал ни версии оракла, ни упомянул до этого про xmltype, скажи уже: зачем тебе это надо? и в чем неправильность-то?
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С