我用php读取商家的商品API,xml格式的,用的函数式getxmldata()这个函数,但是由于数据太大,运行时间常常超时。有没有什么好的办法读这种大的xml?有没有一部分一部分读的方法?具体一点,剩的分都给了。先谢谢大仙们了~

解决方案 »

  1.   

    读淘宝的api都没超时  你这个数据量有多大啊...另外的确是因为数据量大到肯定要超时 那就用set_time_limit() 重新设定个超时时间呗.
      

  2.   

    不知道getxmldata()这个函数是如何写的php提供有操作 XML 的 SimpleXML、DOMDocument ,为何不用一下呢?
    特别的是 XML 语法解析函数,可以以流方式分析 XML,比较适合自己书写解析程序
      

  3.   


    getxmldata函数里面用的是simpleXML,但是由于xml较大,读取时间很久。有没有这样的方法,比如大小为50M的xml文件,每次读取5M(就是每次读取很小的一部分)进内存,处理完了,再接着从xml里面再读取5M之类的方法?这样是不是能提高速度,或者有更好的办法?
      

  4.   

    嗯,SimpleXML、DOMDocument 都是一次性加载 xml 到内存
    如果文件较大,可考虑使用  XML 语法解析函数
    比如手册中的例子$file = "data.xml";
    $depth = array();function startElement($parser, $name, $attrs)
    {
        global $depth;
        for ($i = 0; $i < $depth[$parser]; $i++) {
            echo "  ";
        }
        echo "$name\n";
        $depth[$parser]++;
    }function endElement($parser, $name)
    {
        global $depth;
        $depth[$parser]--;
    }$xml_parser = xml_parser_create();
    xml_set_element_handler($xml_parser, "startElement", "endElement");
    if (!($fp = fopen($file, "r"))) {
        die("could not open XML input");
    }while ($data = fread($fp, 4096)) {
        if (!xml_parse($xml_parser, $data, feof($fp))) {
            die(sprintf("XML error: %s at line %d",
                        xml_error_string(xml_get_error_code($xml_parser)),
                        xml_get_current_line_number($xml_parser)));
        }
    }
    xml_parser_free($xml_parser);