需要 XML 解析器错误开始标记

Posted

技术标签:

【中文标题】需要 XML 解析器错误开始标记【英文标题】:XML Parser Error Start Tag Expected 【发布时间】:2012-08-17 02:16:00 【问题描述】:
function retrieveProfile() 

    $url = "http://steamcommunity.com/profiles/$this->steamID64/?xml=1";
    $profileData = simplexml_load_string($url);

    if(!empty($profileData->error))  return NULL; 

    $this->friendlyName  = (string) $profileData->steamID;  

警告:simplexml_load_string() [function.simplexml-load-string]:实体:第 1 行:解析器错误:需要开始标记,未找到“

警告:simplexml_load_string() [function.simplexml-load-string]:http://steamcommunity.com/profiles/76561197991676121/?xml=1

警告:simplexml_load_string() [function.simplexml-load-string]:^

这是 XML 文件:

http://steamcommunity.com/profiles/76561197991676121/?xml=1

我不知道为什么它不起作用,是的,它有 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 标题! 也试过$profileData = new SimpleXMLElement(file_get_contents($url)),但我得到了相同的结果。

为什么会这样?我该如何解决?我正在搜索 3 个小时,但只看到对我没有帮助的答案。 错误:http://img824.imageshack.us/img824/9464/errorszz.png

EDIT1:simplexml_load_string 是我的错误之一,但现在我遇到了更多关于 simplexml_load_file 的错误 - 告诉我文档是空的...(不是真的!)

【问题讨论】:

【参考方案1】:

您正在加载该 URL 作为您的 XML 源。你应该有:

$profileData = simplexml_load_file($url);

【讨论】:

现在我有更多错误!第 20 行的 /home/a3184184/public_html/openid/includes/SteamAPI.class.php 中的文档为空 + 其他! img824.imageshack.us/img824/9464/errorszz.png @virusbogdan 第 20 行是什么?我尝试用你的代码解析http://steamcommunity.com/profiles/76561197991676121/?xml=1,它工作正常。 我知道它工作正常,但不适合我。第 20 行:$profileData = $profileData = simplexml_load_file($url); 可以打印之前的$url 吗? echo $url; 并检查该值是否符合您的预期。你能做一个$data = file_get_contents($url) 然后回显$data 吗?你得到文件的内容了吗? $url 是正确的,但 $data 看起来是空的......有趣。怎么是空的?我确实回显了“[”。 $数据。 "]";并返回 []【参考方案2】:

网址已从 steamcommunity.com/profiles/76561197991676121/?xml=1 更改为 http://steamcommunity.com/id/virusbogdan/?xml=1 。 显然,第一个链接返回 null,所以出现了错误。问题解决了!

【讨论】:

不那么明显。 file_get_contents() 应该遵循重定向,并且在我测试它时确实如此。可能是 PHP 问题:bugs.php.net/bug.php?id=53018。但是......任何适合你的东西。 对我的主机来说很明显*。现在我需要找出如何获取该重定向链接...有什么想法吗? 警告:simplexml_load_file() [function.simplexml-load-file]:I/O 警告:无法加载外部实体“” - 返回空链接.. 如果不起作用,请使用get_headers() 并访问Location: 标头。

以上是关于需要 XML 解析器错误开始标记的主要内容,如果未能解决你的问题,请参考以下文章

使用DOM解析器解析XML文档,每个标记包含多个元素

XML解析器(Unmarshal)使用JaxB从xml文件中获取元素

使用 SAX 解析器解析自关闭 XML 标记时遇到问题

如何使用 statx 解析器识别空 xml 标记

解析器与词法分析器和 XML

用于处理无效 XML 的 .NET 解析器 [重复]