PHP xmlreader到数组
下面的测试函数使用PHP的xmlreader读取XML文件,并返回一个包含3个值的二维数组(“id”=key) 如何编辑代码,以便在数组中也返回用户名键和值?(显示在末尾) 如何获取用户名密钥和值?PHP xmlreader到数组,php,xml,xmlreader,Php,Xml,Xmlreader,下面的测试函数使用PHP的xmlreader读取XML文件,并返回一个包含3个值的二维数组(“id”=key) 如何编辑代码,以便在数组中也返回用户名键和值?(显示在末尾) 如何获取用户名密钥和值? // needed to end element else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username") { break; } 添加到Jose的答案
// needed to end element
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username")
{
break;
}
添加到Jose的答案中
if ($reader->name == "id" && $reader->nodeType == XMLReader::ELEMENT)
您还需要让读卡器检查
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>';
}
现在您只读取ID,还必须从XML中读取用户名。同时读取用户名后,也可以将其添加到数组中。这应该可以
功能测试()
{
$request=$HTTP\u RAW\u POST\u数据;
错误报告(E|U错误| E|U警告| E|U解析);
$url=”http://site.xml";
$reader=newXMLReader();
$reader->open($url);;
$var=array();
$i=0;
$limit=3;
而($reader->read())
{
if(($reader->name==“id”| |$reader->name==“username”)&&&$reader->nodeType==XMLReader::ELEMENT)
{
$name=$reader->name;
如果($i==$limit)中断;
而($reader->read())
{
如果($reader->nodeType==XMLReader::TEXT
||$reader->nodeType==XMLReader::CDATA
||$reader->nodeType==XMLReader::空白
||$reader->nodeType==XMLReader::有效的(空白)
{
$var[$i][$name]=$reader->value;
}
else if($reader->nodeType==XMLReader::END_元素&&$reader->name==“id”)
{
打破
}
}
如果($name==“username”)
$i++;
}
}
$reader->close();
回声';
印刷费($var);
回声';
}
更改:
($reader->name==“id”||
$reader->name==“用户名”)
$name=$reader->name
$var[$i][$name]=$reader->value
如果($name==“username”)
$i++
有没有关于如何在while循环中写入的建议?是的,在增加i之前再执行一个if语句。搜索用户名就像搜索id一样。我以前从未使用过XML reader类(通常使用DOM),所以我不能说您是否在做一些标准的事情,但这似乎是一种简单的方法。
// needed to end element
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username")
{
break;
}
if ($reader->name == "id" && $reader->nodeType == XMLReader::ELEMENT)
$reader->name == "username"
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>';
}