读取XML并使用PHP中的XMLReader验证模式时出错

时间:2014-05-06 17:19:08

标签: php c xml xmlreader

我有以下PHP代码块:

    if (file_exists($name)) {
    $reader = new XMLReader();
    $reader->open($name);
    $reader->setSchema('inc/schema.xsd');

    while($reader->read());
    $reader->close();
} else {
    die("you're having trouble with the files!");
}

对于某些网址,我收到以下错误:

  

警告:XMLReader :: read():未实现的块   .. \ xmlschemas.c:28351在xml2csv.php上   43

     

警告:XMLReader :: read():读入时发生错误   第43行的xml2csv.php

     

警告:DOMDocument :: load():标记产品中数据的过早结束   在products.xml中的第1行,第1行:   第55行的xml2csv.php中的532571

大多数情况下,给我这个问题的网址是本地网址(当$ name =“file.xml”时)或远程网址(当$ name =“http://www.domain.com/products.xml”)被破坏时(返回404,500,等)。

对错误进行简单的谷歌搜索就把我带到了这个:https://github.com/Chronic-Dev/libxml2/blob/master/xmlschemas.c

在提到的那一行,28351,似乎有一个文字说TODO。因为我的C技能非常有限(几乎没有),我想更好地理解这个错误的原因,我怎么能避免碰到它。

1 个答案:

答案 0 :(得分:0)

正如XMLReader所述,open方法返回boolean,如果成功则为TRUE,如果失败则为FALSE。您可能想尝试下面的代码段吗?

if (file_exists($name)) {
    $reader = new XMLReader();
    if ($reader->open($name)) {
        $reader->setSchema('inc/schema.xsd');
        while($reader->read());
        $reader->close();
    }
} else {
    die("you're having trouble with the files!");
}