直到现在我正在做@simplexml_load_file
并且在返回的xml上我正在使用xpath
网站流量很大,加载xml需要很多时间。
主持人告诉我尝试get_file_contents
,但后来我不知道该做什么来读取作为xml对象返回的内容
他们说要尝试CURL或WGET,但对我而言,它就像我第一次坚持
一样为了获得xml,我可以做些什么,尽可能从合作伙伴api中获取,并且仍然可以将其作为xml读取?
答案 0 :(得分:2)
PHP中最快的XML库是xmlreader 。它非常模糊(我认为很少有PHP用户能够理解它并且能够使用它)但它的速度非常快,因为:
XMLReader扩展是一个XML Pull解析器。读者在文档流中作为光标前进,并在途中停在每个节点上。
这意味着XML文档未在内存中完全预加载。只有当前正在解析的部分才会加载到内存中。
答案 1 :(得分:1)
“获取xml的最快方式”是矛盾的 XML并不是快速的,它旨在兼容。
所以,如果你需要速度 - 你需要另一种格式。另一种方法。
这就是全部。
进一步阅读:Stackoveflow创始人的一篇文章:Back to Basics by Joel Spolsky
答案 2 :(得分:0)
当您的数据在字符串中时,听起来您无法将XML导入SimpleXML。使用simplexml_load_string
来解析file_get_contents
中的数据,或者远程获取数据(通过cURL等)。
我最大的建议是不使用xpath
,因为它会产生开销;而是简单地引用标准对象语法中的元素:$xml->path->value
。
答案 3 :(得分:0)
我的理解是先读取文件,然后
$ string = file_get_contents($ file); $ xml = simplexml_load_string($ string);
它将为您提供所有xml节点。 假设你有这些节点
$target_node = $xml->NewsItem->NewsComponent->ContentItem;
if(isset($target_node))
{
foreach($target_node as $child)
{
//isset
$story_head = (array)$child->DataContent->CPOnlineFile->CPIndexStoryHead;
if(isset($story_head))
{
// go on further by looping and arrowing nodes you will get your desired output... i parse my xml by like this
}
}
}
它只是让你知道如何做到这一点......
答案 4 :(得分:0)
Here有一个很好的博客,关于将XMLWriter类的测试结果与SimpleXML和DOM 进行比较,表明在使用XML时 XMLWriter类要快得多文件并拥有大数据而不是其他解决方案。
XMLReader类与结果中的XMLWriter类非常相似。
我希望这有用。