[英]Parsing XML with the PHP XMLReader
我正在編寫程序,該程序從$ _POST變量中讀取一些XML,然后使用PHP XMLReader進行解析,並將提取的數據輸入數據庫。 我正在使用XMLReader,因為提供的XML很可能太大而無法放入內存。
但是我遇到了一些問題,我的XML和基本代碼如下:
'<?xml version="1.0"?> <data_root> <data> <info>value</info> </data> <action>value</action> </data_root>'
$request = $_REQUEST['xml'];
$reader = new XMLReader();
$reader->XML($request);
while($reader->read()){
//processing code
}
$reader->close()
我的問題是,如果所傳遞的XML不具有<?xml version="1.0"?>
行,但是如果我將其包含在內,則該代碼將可以完美地工作,並且當應用程序進入實時生產環境時將被包含在內。 ,while循環的$reader->read()
代碼不起作用,並且XML不在while循環內進行解析。
有沒有人曾經見過類似的行為或知道為什么會發生這種情況?
提前致謝。
您是什么意思:“不起作用”? 您有任何錯誤嗎?
[編輯]
我也可以重現您的問題,我嘗試了與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 . " - "; }
產生以下結果:1-14-1-14-13-1-15-14-15-14-14-3-15-14-15-
我使用過:帶有Suhosin-Patch(cli)的PHP 5.3.2-0.dotdeb.1(構建於:2010年3月9日10:14:53)
我無法重現此行為(使用php 5.3.2 / win32 + firefox作為第二個示例的客戶端)。
$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();
打印1 14 1 14 1 3 15 14 15 14 1 3 15 14 15
。
$ _REQUEST ['xml']是否真的包含您期望的內容?
編輯:或者另一個實際使用_REQUEST的示例
<?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>
提交表單后,將再次打印1 14 1 14 1 3 15 14 15 14 1 3 15 14 15
。
您需要確認幾件事:
另外,您可能應該使用$ _POST來檢索該數據,這是一個更好的做法。
好的,這里是主要的紅臉程序員,對我的開發環境進行了一些更改,我昨天安裝了新版本的php,並且magic_quotes_gpc設置為“ on”,從而轉義了XML中的引號並導致了問題
謝謝您的幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.