【问题标题】:Opening and ending tag mismatch & Premature end of data in tag rss开始和结束标签不匹配和标签 rss 中的数据过早结束
【发布时间】:2012-04-01 04:55:55
【问题描述】:

我正在尝试从此链接http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss 解析 RSS 提要 但是当我尝试显示结果时,它给了我以下错误:

警告:DOMDocument::load() [domdocument.load]:开始和结束标记不匹配:强行 208 和 http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss 中的描述,行:C:\wamp\www\gazetaExpress\scripts\reader 中的 209。 php 在第 17 行

还有

警告:DOMDocument::load() [domdocument.load]:http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss 中标记 rss 行 2 中的数据过早结束,C:\wamp\www\gazetaExpress\scripts\reader.php 中的第 226 行第 17 行

我用来解析的脚本是

 $xmlDoc->load($xml);

$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<6; $i++)  {
    $item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
    $item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

 // and echo statements

}

当我尝试来自该站点的其他 RSS 源(如运动:http://www.gazetaexpress.com/rss.php?cid=1,24&part=rss)时,它运行良好。正是上面的 RSS 提要不起作用。有没有办法解决这个问题?任何帮助将不胜感激。

【问题讨论】:

  • 错误在于提要本身的构建/创作。您对此无能为力(除非您是提要的作者)。
  • 最好的方法是联系网站并通知他们他们的 RSS 提要已损坏。 Opera 给出此错误:XML 解析失败 XML 解析失败:语法错误(行:209,字符:159)错误:不匹配的结束标记

标签: php rss xml-parsing


【解决方案1】:

这是由于使用了&lt;br&gt; 和其他自闭标签。 dom 尝试像这样&lt;br/&gt; 找到结束,其中&lt;br 是开始,/&gt; 是结束。现代浏览器不会有&lt;tag&gt; 的问题,但是php dom 函数仍然希望你保持XML 标准,所以你需要找到所有&lt;singletags&gt; 并用&lt;singletags /&gt; 替换它们,然后它就可以正常工作了。

【讨论】:

    【解决方案2】:

    当您要解析的片段不符合 XML 规范时(例如,没有“/”的自闭合标签或未闭合标签)并且如果它不包含重复的 id,您可以尝试使用 loadHTML ,它更宽容。

    $xmlDoc->loadHTML($xml);
    

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多