Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 将XML数据加载到MySQL 5.0中_Php_Mysql_Xml_Xml Parsing - Fatal编程技术网

Php 将XML数据加载到MySQL 5.0中

Php 将XML数据加载到MySQL 5.0中,php,mysql,xml,xml-parsing,Php,Mysql,Xml,Xml Parsing,这里完全缺乏合适的解决方案,这让我发疯 一位客户给了我一个14MB大小的XML文件,在将来的请求中可能会更大。我需要一个脚本,可以定期将其数据加载到MySQL表中。服务器运行的是MySQL 5.0.96,因此我不相信LOAD XML命令对我可用 我曾尝试使用PHPDOMLIB解析XML文件,但Apache返回500个内部服务器错误。我认为这是内存不足,因为我可以注释掉加载XML文件的PHP代码,脚本运行平稳(没有数据)。服务器上的内存限制已为128MB 我也尝试过XMLReader,它似乎也在做

这里完全缺乏合适的解决方案,这让我发疯

一位客户给了我一个14MB大小的XML文件,在将来的请求中可能会更大。我需要一个脚本,可以定期将其数据加载到MySQL表中。服务器运行的是MySQL 5.0.96,因此我不相信LOAD XML命令对我可用

我曾尝试使用PHPDOMLIB解析XML文件,但Apache返回500个内部服务器错误。我认为这是内存不足,因为我可以注释掉加载XML文件的PHP代码,脚本运行平稳(没有数据)。服务器上的内存限制已为128MB


我也尝试过XMLReader,它似乎也在做同样的事情。有什么建议吗?

XMLReader作为迭代器工作,因此您必须根据xml文档的各个标记实现分组/提取逻辑。假设xml文件中有一个类似于
的元素,它对应于一个插入,它可能看起来像这样:

$reader = new XMLReader();
$reader->open('/path/to/the/file.xml');
while ($reader->read()) {
    if ($reader->name == "row" && $reader->nodeType == XMLReader::ELEMENT) {
        // the cursor currently at <row> element

        // hopefully one fragment will fit into memory and you can use simplexml for easy access
        // alternatively try $reader->expand() for DOMNode of the same thing
        $rowxml = simplexml_load_string('<'.'?xml version='1.0'?'.'>'.$reader->readOuterXML());

        // build insert from the $rowxml object, run the query
    }
}
$reader->close();
$reader=newXMLReader();
$reader->open('/path/to/the/file.xml');
而($reader->read()){
if($reader->name==“row”&&&$reader->nodeType==XMLReader::ELEMENT){
//当前位于元素上的光标
//希望有一个片段可以放入内存,您可以使用simplexml轻松访问
//或者,对同一事物的DOMNode尝试$reader->expand()
$rowxml=simplexml_load_字符串('.$reader->readOuterXML());
//从$rowxml对象生成insert,运行查询
}
}
$reader->close();

是的,xmlreader可能是一个很好的方法,但您的问题到底是什么?当我尝试使用Dom Lib或xmlreader加载此XML文件时,由于内存限制,服务器返回500个内部服务器错误。有没有更好的方法可以用PHP将XML放入表中?您尝试过python吗?使用python做这样的事情很容易我们的客户使用的平台是PHP。我现在不能建议我们切换到python。XMLReader作为迭代器工作,因此与dom或simplexml解析器不同,它不必将完整的xml文件加载到内存中。您能否展示一些xml文件的示例,以便我们了解xml元素->sql行应该如何生成?