Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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
使用PHP XMLReader解析XML_Php_Xml_Xmlreader - Fatal编程技术网

使用PHP XMLReader解析XML

使用PHP XMLReader解析XML,php,xml,xmlreader,Php,Xml,Xmlreader,我正在编写一个程序,从$_POST变量读入一些XML,然后使用PHP XMLReader进行解析,并将提取的数据输入数据库。我正在使用XMLReader,因为提供的XML很可能太大,无法放入内存 但是我有一些问题,我的XML和基本代码如下: ' 价值 价值 “ 我的问题是,如果传递的XML没有行,那么代码将非常有效,但是如果我包含它,并且当应用程序进入实时生产环境时,它将被包含,while循环的$reader->read()代码不起作用,并且在while循环中不解析XML 以前有没有人见过类似

我正在编写一个程序,从$_POST变量读入一些XML,然后使用PHP XMLReader进行解析,并将提取的数据输入数据库。我正在使用XMLReader,因为提供的XML很可能太大,无法放入内存

但是我有一些问题,我的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

您需要确认以下几点:

  • 如果数据库中的列类型足够大,足以容纳xml,否则它将只存储其中的一部分,从而导致无效的xml“文档”,并导致xml解析器失败
  • 检查php.ini文件夹,确保post_max_size、max_upload_filesize和memory_limit值足够大,否则会出现相同问题,php无法解析它,因为它是无效的“文档”

  • 另外,您可能应该使用$\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>