PHP XMLReader解析行2次
我正在解析一个xml文件。例如,当我输出一个属性时,我总是得到两次结果 以下是我所做工作的一些简化代码:PHP XMLReader解析行2次,php,xml,xmlreader,output,Php,Xml,Xmlreader,Output,我正在解析一个xml文件。例如,当我输出一个属性时,我总是得到两次结果 以下是我所做工作的一些简化代码: $xml = new XMLReader(); $xml->open($file); while ($xml->read()) { if ($xml->name == 'file') echo $xml->getAttribute ('Product_ID') . '<br />';
$xml = new XMLReader();
$xml->open($file);
while ($xml->read()) {
if ($xml->name == 'file')
echo $xml->getAttribute ('Product_ID') . '<br />';
}
// close stream
$xml->close();
谢谢你的帮助 在文档中的注释中找到: 可能是显而易见的,但不是每个人;-)。。。读取属性时 从具有子节点的节点(并从此节点创建输出 节点),输出将发出两次,一次在标记上,另一次在 在结束标记上单击一次。为了避免这种情况,您可以测试 正在使用属性nodeType的节点的一部分。一个月一个 元素,15表示结束元素 您可以应用上述建议的解决方案,也可以使用另一种算法来遍历节点,如下所示:
更新
在评论中用建议的解决方案修改了您的代码
$xml = new XMLReader();
$xml->open($file);
while ($xml->read()) {
if ($xml->name == 'file' && $xml->nodeType==XMLReader::ELEMENT)
echo $xml->getAttribute ('Product_ID') . '<br />';
}
// close stream
$xml->close();
$xml=newXMLReader();
$xml->open($file);
而($xml->read()){
if($xml->name='file'&&$xml->nodeType==XMLReader::ELEMENT)
echo$xml->getAttribute('Product_ID')。
;
}
//密流
$xml->close();
有助于显示XML结构已更新。。。谢谢你的快速回答(stackoverflow初学者)没问题,这就是为什么,对于初学者来说,你在描述问题和提供关于尝试过的信息方面做得很好。大多数人一开始都失败了,并为此而梦想成真,所以kudos.simplexml不起作用,因为我加载的XML文件大于300MB。我必须逐行解析它们。
if ($xml->name == 'file' && $xml->nodeType == XMLReader::ELEMENT)
<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
?>
$xml = new XMLReader();
$xml->open($file);
while ($xml->read()) {
if ($xml->name == 'file' && $xml->nodeType==XMLReader::ELEMENT)
echo $xml->getAttribute ('Product_ID') . '<br />';
}
// close stream
$xml->close();