xmlreader路径中的连字符和下划线未移动到下一个
我对这个脚本有一个问题,问题是我假设它是节点名称中的连字符,它抛出xmlreader,我必须使用xml reader而不是simplexml,因为文件是1gb,我们的服务器只有1gb,无论如何这是xml:xmlreader路径中的连字符和下划线未移动到下一个,xml,xml-parsing,xmlreader,Xml,Xml Parsing,Xmlreader,我对这个脚本有一个问题,问题是我假设它是节点名称中的连字符,它抛出xmlreader,我必须使用xml reader而不是simplexml,因为文件是1gb,我们的服务器只有1gb,无论如何这是xml: <dataroot> <Hotel_All_Active_x0020_08-29-12> ................... </Hotel_All_Active_x0020_08-29-12> <Hotel_All_
<dataroot>
<Hotel_All_Active_x0020_08-29-12>
...................
</Hotel_All_Active_x0020_08-29-12>
<Hotel_All_Active_x0020_08-29-12>
...................
</Hotel_All_Active_x0020_08-29-12>
</dataroot>
但它从不涉及下一个元素,是否有一种简单的方法来处理xmlreader中的非法字符,或者是使用xsl更改名称的唯一选项
这不是完整的脚本,但我知道直到$reader->next();一切都很好了解你的代码在做什么:为什么你在所有元素上循环,而这些元素的名称严格来说不是
Hotel\u all\u Active\u x0020\u 08-29-12
,然后尝试循环所有具有完全相同名称的元素?我可能已经使用了它,这总是会发生,问问题然后我会问,问题是它们的名称都是相同的,但我猜是因为有非法字符,这是行不通的,但我找到了一种更简单的方法,可以将名称转换为xmlreader可以处理的值,而无需编写任何代码#
$reader = new XMLReader();
$reader->open("Hotel_All.xml");
$dom = new DomDocument();
while ($reader->read() && $reader->name !== 'Hotel_All_Active_x0020_08-29-12');
while ($reader->name === 'Hotel_All_Active_x0020_08-29-12')
{
$node = new SimpleXMLElement($reader->readOuterXml());
$nodename = $node->name;
$reader->next('Hotel_All_Active_x0020_08-29-12');
}