Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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到数组_Php_Xml_Xmlreader - Fatal编程技术网

PHP xmlreader到数组

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的答案

下面的测试函数使用PHP的xmlreader读取XML文件,并返回一个包含3个值的二维数组(“id”=key)

如何编辑代码,以便在数组中也返回用户名键和值?(显示在末尾)

如何获取用户名密钥和值?

// 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>';
}