[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: libxml2. Ошибка при валидации XML по XSD
Олька87
Доброго времени суток. Имеется код для проверки соответствия XML-документа схеме:

var_dump(libxml_use_internal_errors(true));

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_GET['schema']) && isset($_POST['data'])) {
$xml = new DOMDocument('1.0');
$xml->encoding = 'UTF-8';
$xml->loadXML($_POST['data'],LIBXML_NOBLANKS);

$xsdPath = $_GET['schema'];
if (!$xml->schemaValidate($xsdPath)) {
print '<b>Validator Generated Errors!</b>';
$errors = libxml_get_errors();
foreach ($errors as $error) {
print libxml_display_error($error);
}
libxml_clear_errors();
} else {
print 'validated';
}
}



function libxml_display_error($error) {
$return = "<br/>\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= "<b>Warning $error->code</b>: ";
break;
case LIBXML_ERR_ERROR:
$return .= "<b>Error $error->code</b>: ";
break;
case LIBXML_ERR_FATAL:
$return .= "<b>Fatal Error $error->code</b>: ";
break;
}
$return .= trim($error->message);
if ($error->file) {
$return .= " in <b>$error->file</b>";
}
$return .= " on line <b>$error->line</b>\n";
return $return;
}


Вот код, посылающий запрос на JS:

var xhr = new XMLHttpRequest();
xhr.open( "POST", 'http://testdoc.comyr.com/validate.php?schema=http://testdoc.comyr.com/e_MWay.xs d', false );
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = function() {
alert( this.responseText );
}
xhr.onerror = function() {
alert( 'error');
}

xhr.send('data=<?xml version="1.0" encoding="UTF-8"?><до:пешех_дор xmlns:до="ador:roadobj" xmlns:о="ador:common" xmlns:уд="ador:traffic" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ador:roadobj http://www.roadman.ru/carman/schemas/e_MWay.xsd"><gml:geometryMember><gml: Polygon><gml:metaDataProperty about="http://www.garmin.com"/><gml:description>Пешеходная дорожка на ул.Речная в п.Лайский Док, Приморский р-он</gml:description><gml:name>до_пешех_дор</gml:name><gml:exterior><gml: LinearRing><gml:posList>41.5392514 63.55577947 41.53940844 63.5557537 41.53926194 63.55557645 41.53910959 63.55560245 41.5392514 63.55577947</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></g ml:geometryMember><дата_обсл>2012-12-17T09:30:47.0Z</дата_обсл><примеч>какое-то примечание</примеч><инфо>http://www.roadman.ru/carman/index.html</инфо>&l t;покр>Железобетонное сборное</покр><вид>Тротуар</вид><шир>1.2</шир><минр>1</минр> ;</до:пешех_дор>');


Результат:
<b>Validator Generated Errors!</b><br/>
<b>Fatal Error 33</b>: String not started expecting ' or " on line <b>1</b>
<br/>
<b>Fatal Error 96</b>: Malformed declaration expecting version on line <b>1</b>
<br/>
<b>Fatal Error 65</b>: Blank needed here on line <b>1</b>
<br/>
<b>Fatal Error 57</b>: parsing XML declaration: '?>' expected on line <b>1</b>
<br/>
<b>Fatal Error 39</b>: AttValue: " or ' expected on line <b>1</b>
<br/>
<b>Fatal Error 65</b>: attributes construct error on line <b>1</b>
<br/>
<b>Error 201</b>: Namespace prefix до on пешех_дор is not defined on line <b>1</b>
<br/>
<b>Fatal Error 73</b>: Couldn't find end of Start Tag пешех_дор line 1 on line <b>1</b>
<br/>
<b>Fatal Error 5</b>: Extra content at the end of the document on line <b>1</b>
<br/>
<b>Error 1872</b>: The document has no document element. on line <b>0</b>

Пространства имен, описанные в корневом теге валидатором воспринимаются, как неправильно оформленные атрибуты и т.д.
Если тот же xml послать не в виде текста в посте, а в виде
$xml->load('http://testdoc.comyr.com/e_mway.xml');

то все хорошо, validate. Мне нужно, чтобы данные приходили в посте. Кто может подсказать ,в чем ошибка? (в кодировке??) Буду очень благодарна за помощь!:)
php 5.2.17, libxml 2.6.26
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.