Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-simpleXml加载文件、simpleXml加载字符串或到数组或缓存的转换_Php_Xml_Arrays_Caching_Simplexml - Fatal编程技术网

PHP-simpleXml加载文件、simpleXml加载字符串或到数组或缓存的转换

PHP-simpleXml加载文件、simpleXml加载字符串或到数组或缓存的转换,php,xml,arrays,caching,simplexml,Php,Xml,Arrays,Caching,Simplexml,关于开销、内存消耗、资源使用和代码处理的易用性,哪种方法是解析大型XML文件的首选方法 simpleXml\u加载\u文件 simplexml\u加载\u字符串 将simpleXML对象转换为数组 将simpleXML转换为缓存 我正在使用simpleXML解析一个非常大的XML文档,该文档将返回用户请求的相关搜索结果 $XMLproducts = simplexml_load_file("products.xml"); 除了最终生成请求的搜索结果外,simpleXML请求还将生成链接,以进一

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

  • simpleXml\u加载\u文件
  • simplexml\u加载\u字符串
  • 将simpleXML对象转换为数组
  • 将simpleXML转换为缓存
  • 我正在使用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) {
    if ($user_input_values == $applicable_xml_values) {
    echo $Product->name ……    
    }}
    
    由于用户可以单击许多优化的搜索过滤器链接以及页码链接以转到下一个搜索结果页面,因此在用户使用完搜索结果之前,将初始simpleXML请求转换为数组或缓存是否更具建设性?这样,当用户单击优化搜索过滤器链接或单击链接以转到下一个搜索结果页面时,他/她将访问数组或缓存以执行此操作,而不是加载整个XML文件(使用另一个simpleXML请求)来执行此操作


    感谢您的建议。

    让我们假设大XML文件不会经常更改

    然后,我建议您创建大XML文件的块,并单独存储它们。每次更新大XML文件时,重复将其拆分为多个部分的过程

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

    <Products>
        <Clothes> - into separate XML file
        <Cars> - into separate XML file
        <Computers> - into separate XML file
    
    
    -转换为单独的XML文件
    -转换为单独的XML文件
    -转换为单独的XML文件
    
    这样,您所做的每一个请求—您就不必加载大文件,从而节省内存

    但是,如果用户的每一个操作都可以更改文件-您必须使用数据库,因为否则您无法保证数据的有效性-每2秒就会有一个新的请求进入,并且您无法确保它将与最新的记录一起工作。

    四个都没有


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

    您到底想要缓存什么?还有,XML文件有多大?有多少用户同时请求该文件?我想缓存从simpleXML请求检索到的结果中的值。XML文件将大约为6MB,并有可能增长。我相信只有一个用户可以每2秒调用一次API。是的!我发现我必须学习如何使用XMLReader或SAX。可能要使用XMLReader来检索XML,然后使用simpleXML来显示它。谢谢
    <Products>
        <Clothes> - into separate XML file
        <Cars> - into separate XML file
        <Computers> - into separate XML file