• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Parsing Xml

  • Автор темы VikaR
  • Дата начала
V

VikaR

Здравствуйте.

Нужно распарсить ХМЛ файл, но файл с ошибкой. Как исправить ошибку, а затем парсить.

Переписываать файл НЕЛЬЗЯ

Использую такой код

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

var readok = false;
xmlDoc.async = "false";
readok = xmlDoc.load(programfolder + "client_state.xml");

if (readok){ здесь парсинг

Но readok содержит ошибку -1072896760 - недопустимый символ. Это не ASCII символ. Так вот как его выбросить, а затем продолжить парсить.

Спасибо

PS. Сам файл здесь
 
1

1ive

Если хочешь сделать всё проще - предлагаю обходной путь)

Simple HTML DOM Parser is designed for reading and editing HTML but it works fine with XML files
Вот сайт проекта

С использованием этого класса, парсер будет выглядеть примерно так:

HTML:
$xml = file_get_html('http://www.google.com/');
foreach($xml->find('span') as $element)
echo $element;
В документации можно посмотреть как спарсить совершенно любой элемент XML
Сам им часто пользуюсь.
 
V

VikaR

Есть путь еще проще - прочитать файл в память как текст, подправить инвалидніе символы, а затем передать парсеру.
Вот код
if (xmlDoc.parseError.errorCode == -1072896760){
var filename = programfolder + "client_state.xml";
try{
var xmlfile = fso_OpenTextFile(filename.substring(8), 1); //1 read
var filecontent = xmlfile.ReadAll();
xmlfile.Close();
// здесь убираются инвалидніе символы (эта часть программы, думаю никого не интересует)
readok = xmlDoc.loadXML(filecontent);
}
catch (e){}
finally { xmlfile.Close(); }
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!