Php reading xml is very slow (large data volume). I use php to read the merchant's product API. in xml format, the function type getxmldata () is used, but because the data is too large, the running time often times out. Is there any good way to read this large xml? Is there a way to read part of the data? Specifically, all the remaining points are given. Thank you ~ Php reading xml is very slow (large data volume)
I use php to read the merchant's product API. in xml format, the function type getxmldata () is used. However, because the data is too large, the running time often times out. Is there any good way to read this large xml? Is there a way to read part of the data? Specifically, all the remaining points are given. Thank you ~
Share:
------ Solution --------------------
Well, SimpleXML and DOMDocument all load xml to the memory at a time.
If the file is large, you can use XML syntax to parse the function.
Example in the manual
$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);