imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 05.01.2007, 13:53     # 1
Vader
Guest
 
Сообщения: n/a

XML, использование недопустимого символа в строке

Добрый день!
Есть XML-файл, представляет собой конфигурационный файл, в нем есть параметр
<user name="Шагин О.В." login="O_Shagin" password="347f3<:[6y" group="default">
Так вот парсер ругается на использование недопустимого символа "<" в значении пароля!
Как же прочесть этот файл?
Заранее спасибо!
 
Старый 05.01.2007, 19:16     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Ну либо заменять символ "<" на &lt; либо что-то придумать со стандартной для XML секцией <![CDATA[...]]> для размещения множества таких вот зарезервированных символов.
ЕЖ вне форума  
Старый 05.01.2007, 20:24     # 3
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
тут однозначно надо CDATA использовать - с хеше что угодно может появиться - и <, и & - да мало ли что там сгенерится
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 06.01.2007, 10:09     # 4
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Досттаточно просто заменять на лету "запрещенные" в XML символы на их аналоги (&...) при записи и обратно при чтении.
Символов там не больше 5 штук разных.
__________________
Дураки не динозавры - они не вымрут...
PSyton вне форума  
Старый 06.01.2007, 13:49     # 5
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отс
Пол: Male
Сообщения: 14 481

Borland - Гад и сволочь
Можно сделать ещё правильнее: хранить всё содержимое поля в кодированном/шифрованном виде. Например, использовать кодировку MIME.
При этом получаем бонус - даже если файл попадёт в руки кому не следует, не каждый ламер прочитает пароль. А если систему кодирования/декодирования придумать самому или хотя бы модифицировать...
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 10.01.2007, 09:49     # 6
Vader
Guest
 
Сообщения: n/a

Спасибо за советы!
Уточню обстоятельства - файл создает сторонняя софтина, мне его надо только прочесть, поэтому я не могу влиять на методологию его формирования. Кстати, если это имеет значение, файл в юникоде.
Как же его разобрать без переделки?
 
Старый 10.01.2007, 15:16     # 7
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
тогда плохо

Или надо катать баг-репорт на софтину, или извращаться, пытаясь обойти этот баг. Потому что это ошибка разработчика. Просто не до тестировали до конца - на некоторых паролях наверняка все ок, а некоторые дают такие вот побочные эффекты.

Тот XML, что ты привел - это не well-formed-XML, а простой текстовый файл (если быть формально точным). Для его обработки XML-функции неприменимы - надо парсить руками
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 11.01.2007, 09:10     # 8
Vader
Guest
 
Сообщения: n/a

Мда, этого я и боялся...
А существуют в природе альтернативные парсеры кроме MS? Может есть такой, кот. понимает что значение в "" может содержать любые символы....
 
Старый 11.01.2007, 12:24     # 9
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
сомневаюсь

по той простой причине, что по стандарту, в "" НЕ МОГУТ быть символы < и & - соответственно, вряд ли в природе есть парсеры, которые будут читать неправильный XML.

в твоем конкретном случае (раз нельзя поправить исходный баг) - мне лично видится только одно решение - перед парсингом заменять все символы в кавычках. Возможно, гуру подскажут правильный регэксп (я в них не силен, сорри)
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 11.01.2007, 16:09     # 10
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
а что, в пароле не может быть двойной кавычки ?
допустим кто-то такой умный как я сделал себе пароль
Цитата:
12" group=
, как тогда будет выглядеть ХМЛ ?
Цитата:
<user name="Шагин О.В." login="O_Shagin" password="12" group=" group="default">
и какой парсер сможет отпарсить такое чудо?
Производителю "сторонней софтины" бить по ушам, пока не сделает патч.
crawler вне форума  
Старый 11.01.2007, 17:57     # 11
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
тогда должно быть
Цитата:
12&quot; group=
т.е.
Цитата:
<user name="Шагин О.В." login="O_Shagin" password="12&quot; group=" group="default">
то, что производителю надо бить по ушам - 100% согласен - это его баг.
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 15.01.2007, 09:09     # 12
Vader
Guest
 
Сообщения: n/a

По идее, если писать в файл парсером, то он сам будет заменять непотребные символы, а при чтении восстанавливать. В моем случае похоже что девелоперы написали свой парсер или юзают какой-то альтернативный.
 
Старый 15.01.2007, 21:31     # 13
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
похоже, тут был не парсер, а просто

print('<user name="$name" login="$login" password="$pass" group="$group">');

или что-то в этом роде
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 20:22.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.