shemaValidate - поиск места ошибки в XML

BelStudent

целеустремлённый чел
shemaValidate - поиск места ошибки в XML

Если dom->shemaValidate==false то как найти место (номер строки, номер символа) где произошла ошибка (не соответствие XSD схеме). Это важно если xml файл большой (>100KB)
 

BelStudent

целеустремлённый чел
Гы, да причём здесь браузер, мне нужно через PHP.

P.s. чтобы просто просматреть xml файл я использую Stulus Studio.
 

Glazyrin Sergey

Новичок
Почитайте здесь комменты
http://ua.php.net/manual/ru/domdocument.validate.php

-~{}~ 08.02.09 23:06:

ЗЫ
Я просто не верю что вам нужно это делать в ПХП
Если б вы объяснили зачем тогда может что то детально смог бы сказать
Я так думаю единственная причина по которой это может понадобиться - например, какой то онлайн сервис который имеет входные параметры например XML файл и вам нужно в случае чего отдавать пользователю конкретную ошибку
Других задач просто не существует для этого(имхо)
 

BelStudent

целеустремлённый чел
Ты прав. Клиент пересылает XML файл на сервер. А там он проверяется и если не соответствует XSD схеме, то выдаётся ошибка с указанием места где конкретно идёт не соответствие.
 

Glazyrin Sergey

Новичок
Кстати по ходу в той ссылке которую я вам дал там есть ответ на ваш вопрос
Хотя я не сильно вчитывался но походу есть
 

BelStudent

целеустремлённый чел
Эх, не то. Там выдаётся файл и строка где произошла ошибка в PHP-файле. Я проверил. Не в xml (((
 

TutanXamoN

Новичок
BelStudent
90% нужных мне вещей я находил на пхп.нет не в описании функций, а в комментах к ним)
В частности класс описанный в первом из них даст необходимый функционал.
 

slach

Новичок
так, народ оставьте неконструктив, выражайтесь яснее
если есть что конкретно говорить говорите
если нет, то в этом форуме лучше промолчать
иначе отправлю в read-only

автору вопроса

если
dom->shemaValidate==false
то как ты вообще XSD валидируешь?

libxml_use_internal_errors(true); стоит??

последний комментарий вот тут прочел??
http://www.php.net/manual/en/domdocument.schemavalidate.php
???

там как раз используется НОРМАЛЬНОЕ отображение места где произошла ошибка

New error message:
DOMDocument::schemaValidate() Generated Errors!
Error 1824: Element 'child_integer': 'Error condition.' is not a valid value of the atomic type 'xs:integer'. in example.xml on line 4
 

BelStudent

целеустремлённый чел
Автор оригинала: slach


автору вопроса

libxml_use_internal_errors(true); стоит??

последний комментарий вот тут прочел??
http://www.php.net/manual/en/domdocument.schemavalidate.php
???

там как раз используется НОРМАЛЬНОЕ отображение места где произошла ошибка

New error message:
DOMDocument::schemaValidate() Generated Errors!
Error 1824: Element 'child_integer': 'Error condition.' is not a valid value of the atomic type 'xs:integer'. in example.xml on line 4
Я всё прочитал в ТОМ числе и коменты, как не странно но 80 процентов того что мне нужно я тоже нахожу в коментах :). Но не в этом случае. да - я использую libxml, да - стоит libxml_use_internal_errors(true);
Но оно показывает строку в которой произошла ошибка, но мне нужен и номер символа в строке. В мануале php о libXMLError сказано :
The column where the error occurred.

Note: This property isn't entirely implemented in libxml and therefore 0 is often returned.
Так оно и есть всегда column показывает ноль. А мне нужно чтобы показывало номер символа, т.к. xml-файлы на другой строне генерируются роботом и получается одна строчка в 10000 символов. Без указания номера символа гле ошибка будет ОЧЕНЬ трудно найти ошибку.
 

slach

Новичок
тогда пробуй делать валидацию не средствами php и libxml
а записывай в файл и дальше парси вывод внешней утилиты

exec ('xmllint --schema myschema.dtd tmp_file.xml',$output,$rc);

хоть и костыль, но может так оно покажет ошибку с конкретным символом в строке?
 

Glazyrin Sergey

Новичок
А если взять и сделать маленький преформат в конце каждого xml тега вставить \n и отдать на скормление libxml ?
Так должно выдать ошибку
 

BelStudent

целеустремлённый чел
Автор оригинала: slach
тогда пробуй делать валидацию не средствами php и libxml
а записывай в файл и дальше парси вывод внешней утилиты

exec ('xmllint --schema myschema.dtd tmp_file.xml',$output,$rc);

хоть и костыль, но может так оно покажет ошибку с конкретным символом в строке?
НЕ myschema.DTD, а myschema.XSD. C XSD будет работать? А то я так никогда не делал.

-~{}~ 09.02.09 17:48:

Автор оригинала: Glazyrin Sergey
А если взять и сделать маленький преформат в конце каждого xml тега вставить \n и отдать на скормление libxml ?
Так должно выдать ошибку
А как я ошибку выдам пользователю, если мои строки не совпадаю с его? Пересылать обратно файл? :)))))))))
 

Glazyrin Sergey

Новичок
Нет ненадо ты по номеру строки можешь выдать место где произошла ошибка
И пусть он ищет по тексту

-~{}~ 09.02.09 17:49:

Конкретный кусок xml файла
 

BelStudent

целеустремлённый чел
Автор оригинала: Glazyrin Sergey
Нет ненадо ты по номеру строки можешь выдать место где произошла ошибка
И пусть он ищет по тексту
Я хотел бы указать точное место, чтобы он исправил ошибку (например, подкорректировал тип).
мне не хочется отправлять его со словами "ищи где-то в этой строке, номер ошибки 1824".
 
Сверху