Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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/0/azure/11.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
xmlreader路径中的连字符和下划线未移动到下一个_Xml_Xml Parsing_Xmlreader - Fatal编程技术网

xmlreader路径中的连字符和下划线未移动到下一个

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_

我对这个脚本有一个问题,问题是我假设它是节点名称中的连字符,它抛出xmlreader,我必须使用xml reader而不是simplexml,因为文件是1gb,我们的服务器只有1gb,无论如何这是xml:

 <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');
  }