2011-11-29 58 views
0

我使用PHP的SimpleXML对象从头开始创建XML文件。但在验证文档时出现此错误:'无法找到元素声明“示例”。“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> 

任何帮助,将不胜感激!谢谢

+0

你如何验证它? – Gordon

+0

可能重复[无法找到元素'作业'的声明](http://stackoverflow.com/questions/1449797/cannot-find-the-declaration-of-element-assignments) – Gordon

回答

2

XML文件需要一些东西来验证它,Document Type Definition (DTD)XML Schema。您不提供任何验证(即检查XML文档的结构/内容是否符合DTD/Schema中规定的规则)是不可能的。

还是你只是想检查well-formedness(即检查所有标签是否正确关闭,是否有任何非法字符等)?

+0

我现在明白了。我只想检查格式,而且格式良好。谢谢。 – jasonaburton

+0

@jasonaburton那么,使用验证器来验证格式良好。你目前如何验证? – phihag

1

为了验证XML文档,您需要一个描述有效文档外观如何的DTD(或XML Schema)。你需要写一个DTD example.dtd为XML的应用程序,要么放弃它验证或包括它在XML文档中,通过与

<!DOCTYPE example SYSTEM "example.dtd"> 

前缀它,因为SimpleXML的不支持的文档类型,您必须手动前缀以上行或使用php的DOM扩展名。幸运的是,您可以使用dom_import_simplexml将SimpleXML片段导入DOM。

相关问题