【发布时间】:2014-02-21 11:03:58
【问题描述】:
我有以下(非常大 => 5GB)XML:
<Hotels>
<Hotel>
<Name>Hotel 1</Name>
<City>City 1</City>
<Phone>12345</Phone>
</Hotel>
<Hotel>
<Name>Hotel 2</Name>
<City>City 2</City>
<Phone>67890</Phone>
</Hotel>
...
</Hotels>
我有一个文件,它定义了我要提取哪些字段以及它们的路径:
$root = "/Hotels/Hotel";
$fields = array("HotelName" => "/Name",
"PhoneNumber" => "/Phone");
所以HotelName 的路径是:/Hotels/Hotel/Name。
现在我想获取每家酒店的信息。我无法为它们创建类(如here),因为脚本必须是动态的,并且将传递具有不同定义文件的不同 XML 文件。
如何通过使用路径、无类且内存使用率低(=> 大文件)来解决此问题?
//编辑:一切都实现了。我只需要一种方法来遍历 Hotel 并使用我拥有的路径获取它们的值。
【问题讨论】:
-
对于“非常大”(有多大?)XML 文件,您可能需要考虑将其转储到关系数据库(看起来这个 XML 文件实际上代表一个表)或使用像 Basex 这样的原生 XML 数据库。
-
这些文件有多大?
-
文件可以是 5 GB 大。我将它们导出为 csv,因此我可以使用“LOAD DATA INFILE”将它们导入 MySQL。
-
写一个 sax 解析器可能会更好