使用PHP XMLReader解析XML
我正在编写一个程序,从$_POST变量读入一些XML,然后使用PHP XMLReader进行解析,并将提取的数据输入数据库。我正在使用XMLReader,因为提供的XML很可能太大,无法放入内存 但是我有一些问题,我的XML和基本代码如下:使用PHP XMLReader解析XML,php,xml,xmlreader,Php,Xml,Xmlreader,我正在编写一个程序,从$_POST变量读入一些XML,然后使用PHP XMLReader进行解析,并将提取的数据输入数据库。我正在使用XMLReader,因为提供的XML很可能太大,无法放入内存 但是我有一些问题,我的XML和基本代码如下: ' 价值 价值 “ 我的问题是,如果传递的XML没有行,那么代码将非常有效,但是如果我包含它,并且当应用程序进入实时生产环境时,它将被包含,while循环的$reader->read()代码不起作用,并且在while循环中不解析XML 以前有没有人见过类似
'
价值
价值
“
我的问题是,如果传递的XML没有
行,那么代码将非常有效,但是如果我包含它,并且当应用程序进入实时生产环境时,它将被包含,while循环的$reader->read()
代码不起作用,并且在while循环中不解析XML
以前有没有人见过类似的行为,或者知道为什么会发生这种情况
提前谢谢。你说“不起作用”是什么意思?你有什么错误吗
[编辑]
我也可以重现你的问题,我尝试了与VolkerK完全相同的方法:
$r = new XMLReader();
$x = '<?xml version="1.0"?> <data_root> <data> <info>value</info> </data> <action>value</action> </data_root>';
$r->XML($x);
while ($r->read()) { echo $r->nodeType . " - "; }
$r=newXMLReader();
$x=‘价值’;
$r->XML($x);
while($r->read()){echo$r->nodeType.-“;}
产生:
1-14-1-14-1-3-15-14-15-14-1-3-15-14-15-
我用过:
PHP5.3.2-0.dotdeb.1和Suhosin补丁(cli)(构建时间:2010年3月9日10:14:53)我无法重现该行为(第二个示例使用PHP5.3.2/win32+firefox作为客户端)
提交表单时,将再次打印
1141141315151515151515151415
。您需要确认以下几点:
另外,您可能应该使用$\u POST来检索数据,这是一种更好的做法。好的,这里的红脸程序员少校,对我的开发环境做了一些更改,昨天我安装了一个新版本的php,magic\u quotes\u gpc被设置为“开”,从而避开了XML中的引号并导致了问题
感谢您的帮助while循环中的代码没有执行,就好像read()函数调用不正确一样。我已经通过让整个程序执行,并将一个
die()
放在从未访问过的while循环中进行了验证。还可以查看SimpleXml选项-SimpleXml\u load\u文件是另一个选项,如果我像第一个示例那样将XML粘贴到代码中,它会很好地工作,但是如果它来自上一个页面和文本区域(如示例2),或者当粘贴到URL中时,它不工作,那么我会对此感到非常迷惑。如果这是您的开发服务器集error_reporting=E_ALL(或更高),我也会这样做。您可能会从xmlreader收到关于格式错误文档的警告消息;-)
$r = new XMLReader();
$x = '<?xml version="1.0"?> <data_root> <data> <info>value</info> </data> <action>value</action> </data_root>';
$r->XML($x);
while ($r->read()) { echo $r->nodeType . " - "; }
$request = '<?xml version="1.0"?> <data_root> <data> <info>value</info> </data> <action>value</action> </data_root>';
$reader = new XMLReader();
$reader->XML($request);
while($reader->read()){
echo $reader->nodeType, " ";
}
$reader->close();
<?php
if ( isset($_REQUEST['xml']) ) {
$request = $_REQUEST['xml'];
$reader = new XMLReader();
$reader->XML($request);
while($reader->read()){
echo $reader->nodeType, " ";
}
$reader->close();
die;
}
$pre = htmlspecialchars(
'<?xml version="1.0"?>
<data_root>
<data>
<info>value</info>
</data>
<action>value</action>
</data_root>');
?>
<html><head><title>....</title></head><body>
<form method="post" action="?">
<div>
<textarea cols="25" rows="8" name="xml"><?php echo $pre; ?></textarea>
<br />
<input type="submit" />
</div>
</form>
</body></html>