XML валидатор

Статус
В этой теме нельзя размещать новые ответы.

bvb

Мастер
Регистрация
17 Май 2009
Сообщения
189
Реакции
31
Есть файл формата основанного на xml. Как его проверить на валидность?
 
PHP:
$doc = new DOMDocument();
$doc->load('book.xml');
все ошибки XML будут выведены в виде warning-ов
помимо этого естькуча софта, он-лайн и десктопных валидаторов
 
Alternator, мне нужен скрипт на PHP и достаточно, чтобы он возвращал 1 если документ валиден.
 
PHP:
function validate_ok($file_name)
	{
	$doc = new DOMDocument();
	$rand_name="validate_xml_".rand();
	$GLOBALS["\0".$rand_name]=true;
	set_error_handler(create_function('$errno,$errstr','$GLOBALS["\0'.$rand_name.'"]=false;'),E_WARNING);
	$doc->load($file_name);
	restore_error_handler();
	$ret=$GLOBALS["\0".$rand_name];
	unset($GLOBALS["\0".$rand_name]);
	return $ret;
	}
 
  • Нравится
Реакции: bvb
Alternator, спасибо. Может быть еще объяснишь как получить аттрибуты определенного элемента?
 
Alternator, спасибо. Может быть еще объяснишь как получить аттрибуты определенного элемента?
мог бы и Для просмотра ссылки Войди или Зарегистрируйся почитать. там это достаточно хорошо описано.
PHP:
$doc = new DOMDocument();
$doc->load($file_name);
$elm=$doc->getElementById('id');//это лишь один из способов доступа к какому-то элементу.
//помимо этого способов куча, в зависимости от того где сидит элемент, и какими свойствами обладает.надо смотреть конкретный XML-документ
for($i=0;$i<$elm->attributes->length;$i++){//выводит все атрибуты
echo $elm->attributes->item($i)->name.'=>'.$elm->attributes->item($i)->value.'<br/>';
}
 
  • Нравится
Реакции: bvb
Если PHP версии 5, то, по-моему, проще использовать SimpleXML.
Им интуитивно понятнее разбирать документ по узлам.
А функция, необходимая ТС, будет выглядеть так:

PHP:
function xmlValidate( $filename ){

  $xml	= simplexml_load_file( $filename );

  return ( empty($xml) ? 0 : $xml ); 
}

Если документ не валидный, то функция возвращает 0.
Если валидный, то объект класса SimpleXMLElement, который можно разбирать по узлам.
 
  • Нравится
Реакции: bvb
Возникла проблема - с большими файлами (порядка 65000 элементов в списке items) работает очень долго. Как быть?
PHP:
$items = $doc->getElementsByTagName("tagname");
  for ($i = 0; $i < $items->length; $i++) {
    echo $items->item($i)->getAttributeNode("attr")->nodeValue."\n";
    ...
  }
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху