![]() |
![]() |
![]() |
|
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,
скажи уже: зачем тебе это надо? и в чем неправильность-то? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |