是否有办法从特定元素/节点循环遍历XML文件。
例如,如果我想从此XML Feed中的<offer id="a2a9d7a3a520de69e8e06f3e53df1c49">
开始:http://pastebin.com/n5myzcz1
那么可以在该ID之后加载所有要约吗?
答案 0 :(得分:0)
我打算建议XPath但是既然你提到文件是1GB,你应该使用流式解析器,例如XMLReader(我现在读到你已经在使用它)。
你一定会进行线性搜索,因为你不知道你想要的元素在哪里,所以你必须经历所有这些元素才能找到它。
修改强>
只是一个深奥的想法可能是使用shell_exec
到grep
文件来查找ID所在的行,然后使用sed
或等效文件从该行切割文件。
编辑2
啊,这很有趣!!
$line = intval(shell_exec('grep -n a2a9d7a3a520de69e8e06f3e53df1c49 orders.xml | cut -d : -f1'));
$totalLines = intval(shell_exec('wc -l orders.xml'));
echo shell_exec("sed -n '".$line.",".$totalLines."p' orders.xml");
也许你只需要输入9999999999而不是计算总线数。当然不是说你应该;);)
我不知道这是否比使用XMLReader浏览文件更快,但我想由您来决定它是否值得。
我希望这可以为您提供进一步的解决方案。