首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您是否可以在不加载整个文件的情况下获得特定的XML值?

您是否可以在不加载整个文件的情况下获得特定的XML值?
EN

Stack Overflow用户
提问于 2011-01-10 18:40:51
回答 5查看 993关注 0票数 0

我最近写了一个PHP插件来连接我的phpBB安装,它将获取我的用户的蒸汽id,将它们转换为蒸汽在其网站上使用的社区id,抓取该社区id的xml文件,获取avatarFull的值(其中包含完整头像的链接),通过curl下载它,调整其大小,并将其设置为用户的新头像。

实际上,它是在同步我论坛的头像和Steam的头像(Steam是一个游戏社区/平台,我经营着一个游戏家族)。我的问题是,每当我从xml文件中读取值时,每个用户需要大约一秒钟的时间,因为它在搜索变量之前加载整个xml文件,这导致整个脚本需要很长时间才能完成。

理想情况下,我希望让我的脚本每天运行几次,以检查来自Steam的每个avatarFull值,并检查它是否已更改(如果已更改,则下载文件),但目前我需要花费太长时间来处理等待它的所有内容。

有没有办法让服务器只提供我要查找的XML值,而不加载整个XML值?下面是我目前调用该值的方式:

代码语言:javascript
复制
$xml = @simplexml_load_file("http://steamcommunity.com/profiles/".$steamid."?xml=1");
$avatarlink = $xml->avatarFull;

下面是一个示例xml文件:XML file

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-10 18:48:12

文件不大。解析它不会花费太多时间。你的第二个时间主要被浪费在网络交流上。

因为没有办法解决这个问题,所以必须实现一个缓存。安排一个脚本,它将每隔一个小时左右在您的服务器上运行一次,以查找更改。此脚本将花费大量时间-每个用户至少需要一秒钟;如果必须下载图片,则需要几秒钟。

当它拥有最新的图片时,它会将其存储在服务器上的某个预定义位置。为您的网页提供服务的脚本将使用此位置,而不是与Steam通信。这样他们将立即工作,并且图片将最多过期1小时。

补充道:这里有一个补充的想法:让你的访问者对Steam执行AJAX请求,并通过JavaScript检查图片是否发生了变化。仅对他们实际正在查看的图片执行此操作。如果有,你可以立即在他们的浏览器中替换过时的图片。您还可以通知您的服务器,然后服务器可以立即下载更新的图片。也许你甚至不需要自己安排任何事情。

票数 2
EN

Stack Overflow用户

发布于 2011-01-10 18:44:04

您必须读取整个流才能获得所需的数据,但不必将其保存在内存中。

如果我使用Java来做这件事,我会使用SAX解析器而不是DOM解析器。我可以处理我感兴趣的几个值,而不需要在内存中保留大的DOM。看看有没有适合你的PHP。

票数 1
EN

Stack Overflow用户

发布于 2011-01-10 20:06:36

SimpleXml是一个DOM解析器。它会将整个文档加载并解析到内存中,然后您才能使用它。如果你不想这样做,可以使用XMLReader,它允许你在从流中读取XML的同时对其进行处理,例如,你可以在获取化身后退出处理。

但是,就像本页面上的其他人已经指出的那样,对于像这样小的文件,这很可能是网络延迟问题,而不是XML问题。

另请参阅Best XML Parser for PHP

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4645905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档