Подскажите хороший XML парсер для C++
От: Аноним  
Дата: 26.11.07 15:10
Оценка:
Необходимо "запихнуть" текст бинарного файла(exe-шника в моем случае) в XML, а потом обратно создать этот бинарник "вытащив" его из XML файла. Я использую tinyXML, кодировка UTF-8. Сам парсер парсит необходимое содержимое хорошо. Но при записи этого XML-файла в базу данных (SQL 2005), сервер начинает "матюкаться" на некоторые символы (в моем случае это символы 0xB9, 0xAD...), вытащенные из бинарного файла. Я так понимаю, что эти символы (как например \r (0xA) либо \n (0xD)) должен преобразовывать сам парсер... Кто-нибудь сталкивался с такой проблемой?
Re: Подскажите хороший XML парсер для C++
От: Sergei I. Gorelkin Россия  
Дата: 27.11.07 23:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Необходимо "запихнуть" текст бинарного файла(exe-шника в моем случае) в XML, а потом обратно создать этот бинарник "вытащив" его из XML файла. Я использую tinyXML, кодировка UTF-8. Сам парсер парсит необходимое содержимое хорошо. Но при записи этого XML-файла в базу данных (SQL 2005), сервер начинает "матюкаться" на некоторые символы (в моем случае это символы 0xB9, 0xAD...), вытащенные из бинарного файла. Я так понимаю, что эти символы (как например \r (0xA) либо \n (0xD)) должен преобразовывать сам парсер... Кто-нибудь сталкивался с такой проблемой?


Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...)
Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.
Re[2]: Подскажите хороший XML парсер для C++
От: romashka Удмуртия  
Дата: 28.11.07 10:03
Оценка:
Здравствуйте, Sergei I. Gorelkin, Вы писали:

SIG>Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...)

SIG>Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.

Спасибо за ответ. Буду искать, как кодировать в base64. Я обошел проблему с нулевыми байтами заменяя их последовательностью символов при записи файла. Потом обратно парсю и вставляю те самые нулевые байты взамен упомянутых символов. Проблемка решилась с парсером. Но вот когда этот файл пытаюсь теперь отсылать в базу данных SQL 2005, она парсит его и "матерится" на русские символы (0xAD русская "н" например). Пробовал использовать раздел CDATA для записи туда бинарника, но ту же ошибку выдает парсер в SQL 2005.
Re[3]: Подскажите хороший XML парсер для C++
От: Максим2006 Беларусь  
Дата: 28.11.07 13:55
Оценка:
Здравствуйте, romashka, Вы писали:

R>Здравствуйте, Sergei I. Gorelkin, Вы писали:


SIG>>Проблема имеет место быть с нулевыми байтами — они в XML недопустимы ни в прямом виде, ни в виде символьных ссылок, поэтому ни один соответствующий стандарту парсер их преобразовывать не будет (msxml не в счет — у них свои взгляды на стандарты...)

SIG>>Как правило, бинарные данные для XML кодируют в base64, после чего годится уже любой парсер.

R>Спасибо за ответ. Буду искать, как кодировать в base64. Я обошел проблему с нулевыми байтами заменяя их последовательностью символов при записи файла. Потом обратно парсю и вставляю те самые нулевые байты взамен упомянутых символов. Проблемка решилась с парсером. Но вот когда этот файл пытаюсь теперь отсылать в базу данных SQL 2005, она парсит его и "матерится" на русские символы (0xAD русская "н" например). Пробовал использовать раздел CDATA для записи туда бинарника, но ту же ошибку выдает парсер в SQL 2005.


Есть ещё YEnc. У него оверхед намного меньше.
Правда, смотрится в xml не так красиво как base64.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.