【问题标题】:SimpleXML XML Parsing [closed]SimpleXML XML解析[关闭]
【发布时间】:2013-01-22 18:56:25
【问题描述】:

我创建了一个从 URL 获取 XML 并更新 mysql 数据库并将数据解析为 csv 文件的脚本。

我得到了 XML 格式的 HTML 字符串,它们不应该存在。解析时如何删除它们?

我像这样加载 XML 文件:

$xml = simplexml_load_file(utf8_encode($xml_url), 'SimpleXMLElement', LIBXML_NOCDATA);

运行脚本时出现的错误:

Warning: simplexml_load_file() [function.simplexml-load-file]: http://domain.com/api/get_catalog.php?id=351&user=878&key=b8:1: parser error : Space required after the Public Identifier in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: http://domain.com/api/get_catalog.php?id=351&user=878&key=b8:1: parser error : SystemLiteral " or ' expected in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: http://domain.com/api/get_catalog.php?id=351&user=878&key=b8:1: parser error : SYSTEM or PUBLIC, the URI is missing in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /dokumenti/skripte/xmlupdate/lost/test/lost_xml.php on line 59
xml $ not loaded.

当我使用 Firefox 并将 XML 从 url 保存到磁盘时,当我尝试从 url 获取它时解析它没有问题。

XML 看起来不错: XML 的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<RecroKatalog>
<viewCustomerDiscount>
    <BrojArtikla>10214</BrojArtikla>
    <Naziv>Eksterno kucište 2.5&quot; S-ATA+IDE HDD, Aluminium, USB 2.0</Naziv>
    <NetoPrice>81.8224</NetoPrice>
    <Status>Dostupno</Status>
    <Opis></Opis>
    <dugi_opis>Isporucuje se u SIVOJ boji</dugi_opis>
    <Image>http://shop.lost.hr/data/images/big/10.jpg</Image>
    <WEB_Grupa>Ladice i eksterna kucišta - OSTALO</WEB_Grupa>
    <Akcija>0</Akcija>
    <Proizvodjac></Proizvodjac>
    <Klasifikacija>PH-25SD-B/VK220</Klasifikacija>
</viewCustomerDiscount>

【问题讨论】:

  • 因为它不是有效的xml。
  • 看起来像在您远程调用 XML 时附加了额外的行,这会导致它无效
  • 首先您可以使用 XMLReader::isValid(void) 来查看您的 xml 文档是否有效。
  • 我试过 XMLReader::isValid(void) 并得到 bool(true) 所以 XML 是有效的?

标签: php xml xml-parsing


【解决方案1】:

错误消息中有一些HUGE线索。它抱怨看到:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

它是该网站提供的 HTML 文档的开始……而不是您要查找的 XML。

这通常发生在您必须对远程服务进行身份验证时(因此在您登录时在浏览器中工作),但您并没有告诉 SimpleXML 为您执行此操作。

【讨论】:

  • 我认为这与他的陈述有关:“它今天停止工作,我很困惑,因为它读取的是 HTML 而不是 XML”。但这并没有真正帮助我们。
  • 但是当我用浏览器访问那个 url 时,我得到了有效的 XML? 3 小时前这有效吗?它在过去 20 天里是如何工作的?
  • @mehnihma 什么网址?......
  • @mehnihma 发生了一些变化;如果您没有更改代码,请向 API 提供者寻求支持。
  • 我会,但我明天可以做,我今天需要它,我试过 file_get_contents 和 file_put_contents 下载它,我得到 404 页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多