XML验证错误:'找不到元素声明“示例”。“

时间:2011-11-29 14:38:46

标签: php xml wordpress

我正在使用PHP的SimpleXML Object从头开始创建XML文件。但是我在验证文档时遇到了这个错误:“无法找到元素声明”示例“。”

以下是创建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 个答案:

答案 0 :(得分:2)

XML文件需要对其进行验证,Document Type Definition (DTD)XML Schema。您没有提供任何内容,因此验证(即,检查XML文档的结构/内容是否符合DTD / Schema中规定的规则)是不可能的。

或者您是否只想检查well-formedness(即检查所有标签是否正确关闭,是否在任何地方都没有非法字符等)?

答案 1 :(得分:1)

为了验证XML文档,您需要DTD(或XML Schema)来描述有效文档的外观。您需要为XML应用程序编写DTD example.dtd,并将其提供给验证程序或将其包含在XML文档中,方法是在其前面加上

<!DOCTYPE example SYSTEM "example.dtd">

由于SimpleXML不支持doctypes,因此您必须手动为上述行添加前缀或使用php的DOM扩展名。幸运的是,您可以使用dom_import_simplexml将SimpleXML片段导入DOM。