PHP xmlreader 到数组 [英] PHP xmlreader to array
问题描述
以下测试函数使用 PHP 的 xmlreader 读取 XML 文件,并返回一个包含 3 个值的二维数组(id"= key).
如何编辑代码以便用户名键和值也在数组中返回?(显示在最后)
ini_set('always_populate_raw_post_data', 'on');功能测试(){$request = $HTTP_RAW_POST_DATA;错误报告(E_ERROR | E_WARNING | E_PARSE);$url = "http://site.xml";$reader = new XMLReader();$reader->open($url);;$var = 数组();$i = 0;$limit = 3;而 ($reader->read()){if ($reader->name == "id" && $reader->nodeType == XMLReader::ELEMENT){如果 ($i == $limit) 中断;而 ($reader->read()){if ($reader->nodeType == XMLReader::TEXT||$reader->nodeType == XMLReader::CDATA||$reader->nodeType == XMLReader::WHITESPACE||$reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE){$var[$i]["id"] = $reader->value;}else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "id"){休息;}}$i++;}}$reader->close();echo '';打印_r($var);echo '</pre>';}
test() 返回这个数组
数组([0] =>大批([id] =>345)[1] =>大批([id] =>123)[2] =>大批([id] =>789))
如何获取用户名键和值?
数组([0] =>大批([id] =>345[用户名] =>姓名1)[1] =>大批([id] =>123[用户名] =>姓名2)[2] =>大批([id] =>789[用户名] =>姓名3))
加入何塞的回答
//需要结束元素else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username"){休息;}
这应该可行.
函数测试(){$request = $HTTP_RAW_POST_DATA;错误报告(E_ERROR | E_WARNING | E_PARSE);$url = "http://site.xml";$reader = new XMLReader();$reader->open($url);;$var = 数组();$i = 0;$limit = 3;而 ($reader->read()){if (($reader->name == "id" || $reader->name == "username") && $reader->nodeType == XMLReader::ELEMENT){$name = $reader->name;如果 ($i == $limit) 中断;而 ($reader->read()){if ($reader->nodeType == XMLReader::TEXT||$reader->nodeType == XMLReader::CDATA||$reader->nodeType == XMLReader::WHITESPACE||$reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE){$var[$i][$name] = $reader->value;}else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "id"){休息;}}if($name == "用户名")$i++;}}$reader->close();echo '';打印_r($var);echo '</pre>';}
变化:
<块引用>($reader->name == "id" ||$reader->name == "username")
$name = $reader->name;
$var[$i][$name] = $reader->value;
if($name == "用户名")$i++;
The following test function reads an XML file with PHP's xmlreader and returns a 2 dimensional array of 3 values ("id" = key).
How can you edit the code so that the username key and value is returned in the array also? (shown at the end)
ini_set('always_populate_raw_post_data', 'on');
function test()
{
$request = $HTTP_RAW_POST_DATA;
error_reporting(E_ERROR | E_WARNING | E_PARSE);
$url = "http://site.xml";
$reader = new XMLReader();
$reader->open($url);;
$var = array();
$i = 0;
$limit = 3;
while ($reader->read())
{
if ($reader->name == "id" && $reader->nodeType == XMLReader::ELEMENT)
{
if ($i == $limit) break;
while ($reader->read())
{
if ($reader->nodeType == XMLReader::TEXT
|| $reader->nodeType == XMLReader::CDATA
|| $reader->nodeType == XMLReader::WHITESPACE
|| $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE)
{
$var[$i]["id"] = $reader->value;
}
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "id")
{
break;
}
}
$i++;
}
}
$reader->close();
echo '<pre>';
print_r($var);
echo '</pre>';
}
test() returns this array
Array
(
[0] => Array
(
[id] => 345
)
[1] => Array
(
[id] => 123
)
[2] => Array
(
[id] => 789
)
)
How do you also get username key and value?
Array
(
[0] => Array
(
[id] => 345
[username] => name1
)
[1] => Array
(
[id] => 123
[username] => name2
)
[2] => Array
(
[id] => 789
[username] => name3
)
)
Add to Jose's answer
// needed to end element
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username")
{
break;
}
This should work.
function test()
{
$request = $HTTP_RAW_POST_DATA;
error_reporting(E_ERROR | E_WARNING | E_PARSE);
$url = "http://site.xml";
$reader = new XMLReader();
$reader->open($url);;
$var = array();
$i = 0;
$limit = 3;
while ($reader->read())
{
if (($reader->name == "id" || $reader->name == "username") && $reader->nodeType == XMLReader::ELEMENT)
{
$name = $reader->name;
if ($i == $limit) break;
while ($reader->read())
{
if ($reader->nodeType == XMLReader::TEXT
|| $reader->nodeType == XMLReader::CDATA
|| $reader->nodeType == XMLReader::WHITESPACE
|| $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE)
{
$var[$i][$name] = $reader->value;
}
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "id")
{
break;
}
}
if($name == "username")
$i++;
}
}
$reader->close();
echo '<pre>';
print_r($var);
echo '</pre>';
}
CHANGES:
($reader->name == "id" || $reader->name == "username")
$name = $reader->name;
$var[$i][$name] = $reader->value;
if($name == "username") $i++;
这篇关于PHP xmlreader 到数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!