Parsing Xml

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

VikaR

Гость
#1
Здравствуйте.

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

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

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

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. Сам файл здесь http://depositfiles.com/files/siu4d6bug
 

1ive

Well-Known Member
12.09.2010
621
0
#2
Если хочешь сделать всё проще - предлагаю обходной путь)

Simple HTML DOM Parser is designed for reading and editing HTML but it works fine with XML files
Вот сайт проекта http://sourceforge.net/projects/simplehtmldom/

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

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

VikaR

Гость
#3
Есть путь еще проще - прочитать файл в память как текст, подправить инвалидніе символы, а затем передать парсеру.
Вот код
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(); }
}