Ошибка проверки XML: «Не удается найти объявление элемента« example ».» - PullRequest
0 голосов
/ 29 ноября 2011

Я создаю XML-файл с нуля, используя PHP SimpleXML Object.Но я получаю эту ошибку при проверке документа: «Не удается найти объявление элемента« example ».»

Вот код, который создает документ XML:

    $xml = new SimpleXMLElement('<example></example>');
    $xml->addChild('producers');

    foreach($producers as $i=>$producer){
       $name = get_the_title($producer->ID);
       $owner = get_post_meta($producer->ID, '_producer_contact_name', true);
       $phone = get_post_meta($producer->ID, '_producer_phone', true);
       $fax = get_post_meta($producer->ID, '_producer_fax', true);
       $email = get_post_meta($producer->ID, '_producer_email', true);
       $website = get_post_meta($producer->ID, '_producer_website', true);
       $address = get_post_meta($producer->ID, '_producer_address', true);

       $xml->producers->addChild('producer');
       $xml->producers->producer[$i]->addChild('name', $name);
       $xml->producers->producer[$i]->addChild('owner', $owner);
       $xml->producers->producer[$i]->addChild('phone', $phone);
       $xml->producers->producer[$i]->addChild('fax', $fax);
       $xml->producers->producer[$i]->addChild('email', $email);
       $xml->producers->producer[$i]->addChild('website', $website);
       $xml->producers->producer[$i]->addChild('civic', $address[0]); 
       $xml->producers->producer[$i]->addChild('mailing', $address[1]); 
       $xml->producers->producer[$i]->addChild('town', $address[2]); 
       $xml->producers->producer[$i]->addChild('province', $address[3]); 
       $xml->producers->producer[$i]->addChild('postal', $address[4]);           
    }

    $open = fopen($file, 'w') or die ("File cannot be opened.");
    fwrite($open, $xml->asXML());
    fclose($open);

XML, который производится так:

<?xml version="1.0"?>
   <example>
      <producers>
         <producer>
            <name></name>
            <phone></phone>
            <fax></fax>
            <email></email>
            <website></website>
            <civic></civic>
            <mailing></mailing>
            <town></town>
            <province></province>
            <postal></postal>
         </producer>
      </producers>
   </example>

Любая помощь будет оценена!Спасибо

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

XML-файлу требуется что-то для проверки: Определение типа документа (DTD) или XML-схема . Вы не предоставляете никаких данных, поэтому проверка (т. Е. Проверка соответствия структуры / содержимого документа XML правилам, изложенным в DTD / Schema) невозможна.

Или вы просто хотели проверить правильность (то есть, проверить, что все теги закрыты правильно, что нигде нет запрещенных символов и т. Д.)?

1 голос
/ 29 ноября 2011

Для проверки XML-документа вам потребуется DTD (или XML-схема ), который описывает, как выглядит действительный документ. Вам нужно написать DTD example.dtd для вашего XML-приложения и либо передать его валидатору, либо включить в ваш XML-документ, добавив префикс

<!DOCTYPE example SYSTEM "example.dtd">

Поскольку SimpleXML не поддерживает типы документов, вы должны либо вручную добавить префикс вышеупомянутой строки, либо использовать расширение DOM в php. К счастью, вы можете импортировать фрагмент SimpleXML в DOM с помощью dom_import_simplexml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...