Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TXMLDocument - маскировка символов


Автор: v258 29.5.2018, 23:59
Моя прога обрабатывает файл sitemap.xml. По спецификации некоторые символы, а именно: амперсанд (&), угловые скобки(<,>), апостроф(') и двойные кавычки(") в URL должны маскироваться. Проблема в следующем:

Для обработки использую TXMLDocument, DOMVendor - MSXML. Амперсанд и угловые скобки при добавлении URL маскируются автоматически, а вот апостроф и кавычки - нет. Если маскировать их вручную, то вместо &quot; получается &amp;quot; , а вместо &apos; получается &amp;apos; , т.е. амперсанд вполне ожидаемо тоже маскируется, что для наших целей категорически недопустимо. И, даже если готовый файл открыть в блокноте и вручную заменить кавычки и апострофы масками, при загрузке файла маски автоматически преобразуются опять таки в кавычки и апострофы. 

Собственно, вопрос - как заставить XMLDocument либо маскировать и кавычки с апострофом, либо запретить маскировку символов вообще, чтобы можно было делать ее вручную при добавлении URL?

Delphi 2010

Автор: Hiori 4.7.2018, 08:43
поздно конечно, но... StringReplace уже не? заменить то, что неправильно меняет TXMLDocument, и передать в класс уже правленую строку.

Автор: v258 4.7.2018, 09:37
Цитата(Hiori @  4.7.2018,  08:43 Найти цитируемый пост)
поздно конечно, но... StringReplace уже не? заменить то, что неправильно меняет TXMLDocument, и передать в класс уже правленую строку.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)