获取xml并在php中使用它的最快方法

时间:2012-03-07 05:16:14

标签: php xml

直到现在我正在做@simplexml_load_file并且在返回的xml上我正在使用xpath

网站流量很大,加载xml需要很多时间。

主持人告诉我尝试get_file_contents,但后来我不知道该做什么来读取作为xml对象返回的内容

他们说要尝试CURL或WGET,但对我而言,它就像我第一次坚持

一样

为了获得xml,我可以做些什么,尽可能从合作伙伴api中获取,并且仍然可以将其作为xml读取?

5 个答案:

答案 0 :(得分:2)

PHP中最快的XML库是xmlreader 。它非常模糊(我认为很少有PHP用户能够理解它并且能够使用它)但它的速度非常快,因为:

  

XMLReader扩展是一个XML Pull解析器。读者在文档流中作为光标前进,并在途中停在每个节点上。

这意味着XML文档未在内存中完全预加载。只有当前正在解析的部分才会加载到内存中。

答案 1 :(得分:1)

“获取xml的最快方式”是矛盾的 XML并不是快速的,它旨在兼容。

所以,如果你需要速度 - 你需要另一种格式。另一种方法。

  1. 将您的数据存储在本地,而不是在每个用户请求上通过网络(!!!)提取数据。
  2. 将其保存在数据库中,而不是XML文件
  3. 这就是全部。

    进一步阅读: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类非常相似。

我希望这有用。