Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Непонятки с XML / 5 сообщений из 5, страница 1 из 1
08.11.2013, 08:50
    #38457357
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с XML
Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
drop table if exists customer;
create table customer(my_id serial, my_txt char(20));
insert into customer values (0, "first");
insert into customer values (0, "second");
insert into customer values (0, "third");
SELECT idsxmlparse(genxmlschemaclob(customer, 'customer')) FROM customer;


всегда возвращает ошибку:
8355: Function (idsxmlparse) Error parsing the input XML document.

Проверял в кодировках ru_RU.8859-5, ru_RU.utf8, en_US.utf8, en_US.819
Странно, ведь сервер сам формирует XML-документ, и сам же его считает ошибочным?
Может, я что-то делаю неправильно?
...
Рейтинг: 0 / 0
08.11.2013, 18:08
    #38458302
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с XML
Решение вроде бы нашел, неуклюжее, но работает:
Код: sql
1.
2.
3.
4.
 select idsxmlparse(
replace(replace(col, "ru_RU.915", "ISO8859-5"), '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">')
)
from table(genxmlqueryhdr('customer','select * from customer')) as tmptb(col)
...
Рейтинг: 0 / 0
13.11.2013, 19:28
    #38463995
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с XML
Даже русские буквы проявились, что необычно для XML в Informix
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
drop table if exists customer;
create table customer(my_id serial, my_txt char(20));
insert into customer values (0, "first");
insert into customer values (0, "second");
insert into customer values (0, "third");
insert into customer values (0, "первый");
insert into customer values (0, "второй");
insert into customer values (0, "третий");
select xsltransform(
idsxmlparse(replace(replace(col, "ru_RU.915", "ISO-8859-5"), '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">'))
,'<?xml version="1.0" encoding="ISO-8859-5"?><xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="string" encoding="ISO-8859-5"/><xsl:template match="/"><xsl:for-each select="*"><xsl:value-of select="."/></xsl:for-each></xsl:template></xsl:stylesheet>'
)
from table(genxmlqueryhdr('customer','select * from customer')) as tmptb(col);


результат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="ISO-8859-5"?>
1
first               

2
second              

3
third               

4
первый              

5
второй              

6
третий              
...
Рейтинг: 0 / 0
10.01.2014, 18:25
    #38522387
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с XML
victor16,

а у replace есть ограничения на длину строки?
...
Рейтинг: 0 / 0
13.01.2014, 10:55
    #38523953
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятки с XML
cprа у replace есть ограничения на длину строки?
Ограничения зависят от типа параметров функции и наличия свободной памяти на сервере. Я думаю, не стоит передавать в качестве параметров строку, длина которой превышает размер доступной памяти.
Для больших XML стоит использовать тип BLOB. Для него, правда, отсутствует функция replace, но ее Вы можете написать сами на C или Java. В свое время я создал на C подобную библиотеку для работы с BLOB-полями, пользуюсь до сих пор.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Непонятки с XML / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]