PHP - simpleXml_load_file,simplexml_load_string或转换为数组或缓存

时间:2014-04-13 16:16:17

标签: php xml arrays caching simplexml

关于开销,内存消耗,资源使用和代码处理的简易性,这是解析大型XML文件的首选方法吗?

  1. 使用simplexml_load_file
  2. simplexml_load_string
  3. 将simpleXML对象转换为数组
  4. 将simpleXML转换为缓存
  5. 我使用simpleXML来解析一个非常大的XML文档,该文档将返回用户请求的相关搜索结果。

    $XMLproducts = simplexml_load_file("products.xml");
    

    在最终生成请求的搜索结果的同时,simpleXML请求还将生成链接以进一步细化获得的搜索结果...

    foreach($XMLproducts->product as $Product) {
    if ($user_input_values == $applicable_xml_values) {
    // all refined search filter links produced here, then displayed later
    $refined_search_filter_Array1[] = URL code + (string)$Product->applicable_variable;
    $refined_search_filter_Array2[] = URL code + (string)$Product->applicable_variable2;
    }
    

    ...以及帮助生成搜索结果页面(因为每页将有20个搜索结果)。

    foreach($XMLproducts->product as $Product) {
    //coding to produce pages number links for the search results pages number
    }
    

    然后我们最终得到用户要求的实际搜索结果:

    foreach($XMLproducts->product as $Product) {
    if ($user_input_values == $applicable_xml_values) {
    echo $Product->name ……    
    }}
    

    由于用户可以点击一些精炼的搜索过滤器链接以及页码链接转到下一个搜索结果页面,因此将初始的simpleXML请求转换为数组或者更为有建设性是否正确进入缓存直到用户完成使用搜索结果?这样,当用户点击精炼的搜索过滤器链接或点击链接转到下一个搜索结果页面时,他/她将访问数组或缓存来执行此操作,而不是加载整个XML文件(另一个simpleXML请求)。

    感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

我们假设大型XML文件并不经常更改。

然后我会建议你创建大型XML文件的块并分别存储它们。每次更新大型XML文件时 - 重复将其拆分为多个部分的过程。

从大文件中 - 只保留结构,以便您仍然可以浏览它。当用户离开主文件并进入某个分支时 - 加载相应的较小部分..

<Products>
    <Clothes> - into separate XML file
    <Cars> - into separate XML file
    <Computers> - into separate XML file

这样,你做的每一个请求 - 你都不必加载大文件,节省内存。

但是,如果用户的每个操作都可以更改文件 - 您必须使用数据库,否则您无法保证数据的有效性 - 每2秒发出一个新请求,您可以&确保它能够与最新的记录一起使用。

答案 1 :(得分:0)

四者中没有一个。

他们是同一方法的所有变体:智能处理器,在内存中使用完整的数据集创建复杂的数据结构。而你甚至不会尝试不同的智能处理器,只有simpleXML。 PHP中唯一可扩展的XML库是XMReader,假设您使用它来编写按顺序读取数据的代码,获取所需内容并丢弃其余内容。但当然这一切都需要付出代价:更好的性能可以用于更多的编码工作。