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

Откуда:
Сообщений: 591
Запрос:
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-документ, и сам же его считает ошибочным?
Может, я что-то делаю неправильно?
8 ноя 13, 08:50    [15095241]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с XML  [new]
victor16
Member

Откуда:
Сообщений: 591
Решение вроде бы нашел, неуклюжее, но работает:
 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)
8 ноя 13, 18:08    [15099257]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с XML  [new]
victor16
Member

Откуда:
Сообщений: 591
Даже русские буквы проявились, что необычно для XML в Informix
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);

результат
<?xml version="1.0" encoding="ISO-8859-5"?>
1
first

2
second

3
third

4
первый

5
второй

6
третий
13 ноя 13, 19:28    [15124242]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с XML  [new]
cpr
Member

Откуда: Rostov-on-Don
Сообщений: 762
victor16,

а у replace есть ограничения на длину строки?
10 янв 14, 18:25    [15398734]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с XML  [new]
victor16
Member

Откуда:
Сообщений: 591
cpr
а у replace есть ограничения на длину строки?

Ограничения зависят от типа параметров функции и наличия свободной памяти на сервере. Я думаю, не стоит передавать в качестве параметров строку, длина которой превышает размер доступной памяти.
Для больших XML стоит использовать тип BLOB. Для него, правда, отсутствует функция replace, но ее Вы можете написать сами на C или Java. В свое время я создал на C подобную библиотеку для работы с BLOB-полями, пользуюсь до сих пор.
13 янв 14, 10:55    [15406635]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить