• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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(); }
}
 
Мы в соцсетях:

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