Имя: Пароль:
IT
Админ
UpdateXML Oracle
0 zhmur
 
27.03.07
10:19
Если кто то сталкивался то подскажите пути решения следующей проблемы. В базе Oracle 10gR2 хранится XML в CLOB т.е. не структурированный. Все нормально пока не пытаешься применить к XML функцию UpdateXML или подобные. После этого оракл "форматирует" весь XML. И получается вот что:
До
<a>Text1<b>Text2</b></a>
После
<a>Text1
 <b>Text2</b>
</a>
Это неедопустимо для нашего приложения (и вообще говоря не верно) Есть ли мнения как "отключить форматирование?
1 asady
 
27.03.07
10:22
(0) убери возврат каретки и будет тебе неформатированный XML
2 zhmur
 
27.03.07
10:22
Тупой вопрос: как?
3 zhmur
 
27.03.07
10:27
И дело даже не в переносе каретки, а в том что он туда добавляет пробелы лишние. Я привёл очень просто пример но на самом деле это происходит в XML файлах объемом 600 килобайт и больше.
4 asady
 
27.03.07
10:28
(2) поиск в СП по ключевой фразе "Последовательный доступ к тексту"
5 zhmur
 
27.03.07
10:34
ээээ в оракле? :)
6 Ангел- Хоронитель
 
27.03.07
10:34
(4)вопрос-то вроде как не по 1С.....
7 asady
 
27.03.07
10:38
(5) напиши свой парсер для этого или воспользуйся готовыми типо oxigenxml
там кода строк на 20-30 будет.
8 Мяв-Мяв
 
27.03.07
10:38
(3) должны быть не пробелы, а знаки табуляции. посмотри внимательнее.
9 zhmur
 
27.03.07
10:39
Это не меняет трагизма ситуации.
10 Мяв-Мяв
 
27.03.07
10:45
а в чем трагизм-то?
любой парсер плевать хотел и на возвраты и на табуляторы.
кроме того это - совершенно нормальный вид XML.
11 zhmur
 
27.03.07
10:49
Так. По спецификации все что хранится после <a> до <b> считается текстом. Со всеми вытекающими последствиями. Именно поэтому ни альтова ни любой другой редактор или паресер никогда не разбивают подобные конструкции.
12 Мяв-Мяв
 
27.03.07
11:03
конечно. как текст оно и отражается. все что от открытия "а" и до открытия "b"
создаю новый XML файл. Добавляю корневой элемент. внутрь элемента добавляю твою строчку "<a>Text1<b>Text2</b></a>". Сохраняю. все имеющиеся у меня вьюеры и редакторы показывают это как
"
 <?xml version="1.0" encoding="utf-8" ?>
- <root>
- <a>
 Text1
 <b>Text2</b>
 </a>
 </root>
"

хотя на самом деле ни переводов ни табуляторов нет.
при перезаписи файла редактором переводы и табуляторы появляются. Отображение не изменяется.
13 Мяв-Мяв
 
27.03.07
11:23
смеху ради понатыкал табуляторов и пробелов вразнобой.
добавил переводов и возвратов каретки. нафигачил пустых строк.
отображение не меняется.
14 Лефмихалыч
 
27.03.07
11:27
(12,13) отображение не меняется от того, что в майкрософт интернет испортил'е есть встроенный XSLT, который делает Trim для значений элементов и вставляет переводы
15 Мяв-Мяв
 
27.03.07
11:32
(14) чё?
16 Лефмихалыч
 
27.03.07
11:40
(14) какое именно слово тебе не понятно?
17 Мяв-Мяв
 
27.03.07
11:42
словосочетние "майкрософт интернет испортил'е"
что это такое
и как оно влияет на отображение структуры xml файла в kxmleditor например.
18 Лефмихалыч
 
27.03.07
11:45
(17) По первому пункту: "майкрософт интернет испортил" = MS Internet Explorer.
по второму: два варианта, либо kxmleditor использует для визуализации IWebBrowser2, либо - такойже (аналогичный) XSLT
19 Лефмихалыч
 
27.03.07
11:47
(18) про IWebBrowser2 - лажа, kxmleditor оказывается для KDE. Значит - второй вариант - такой же XSLT, который обрубает пробелы
20 Мяв-Мяв
 
27.03.07
11:50
пошел нашел компутер с виндовсом.
в самом деле - отображает точно так же.
и что характерно - майкрософтовский парсертоже говорит, что то, что от a до б - текст.
Так что может на самом деле все равно, есть в xml файле табуляторы или нет?
если и с ними и без них он парсится одинаково?
21 Лефмихалыч
 
27.03.07
11:59
(20) за отображение XML в броузере отвечает таблица преобразований XSLT. При этом, значение, которое отображает браузер может отличаться от значения, содержащегося в XML, таким образом, автор (0) прав в своем негодовании о том, что вместо XML документа, он получает ПРЕДСТАВЛЕНИЕ его после вызова UpdateXML(). Я вот об этом говорил
22 Лефмихалыч
 
27.03.07
12:00
(0) к слову, может в описании метода UpdateXML() и подобных указано, что они возвращают ПРЕДСТАВЛЕНИЕ? Если - да, то тут ты сам виноват - не те методы вызываешь
23 Мяв-Мяв
 
27.03.07
12:17
наплюй на представление.
xml совершенно равнодушен к знакам форматирования.
UpdateXML() "returns an XMLType instance with the updated value"
после вызова автор получает валидный xml, абсолютно тождественный первоначальному, отформатированый для удобства чтения при отсутствии парсинга. Вот об этом я и говорил.
24 Лефмихалыч
 
27.03.07
12:27
(23) да не тот же он получает документ, а уже другой - у него трагедия в том, что пробелов в значениях элементов должно быть столько, чтолько было до UpdateXML(). Видать, самопальный парсер какой-то потом ни чего понять не может...
25 Мяв-Мяв
 
27.03.07
12:37
и это тоже понятно. формально он другой.  но фактически (как xml) - тот же самый. но он уверен, что "это неправильно" и вместо того чтоб исправить свою самоделку сейчас будет тиранить оракл.
вот залезет в доку, и увидит, что у функции 4 аргумента. и будет рыть дальше.
26 zhmur
 
27.03.07
13:22
Всем спасибо. Проблема решена. Когда не используется XMLType  и преобразование осуществляется на лету разметка не вставляется. Причём исправлено это только в релизе 2. Что то я смотрю тут всё обсуждение свелось к тому зачем мне это надо :)
27 Мяв-Мяв
 
27.03.07
13:59
ну хотя ты и не сказал ни версии оракла, ни упомянул до этого про xmltype,
скажи уже: зачем тебе это надо?
и в чем неправильность-то?
Основная теорема систематики: Новые системы плодят новые проблемы.