PHP xmlreader 到数组 [英] PHP xmlreader to array

查看:26
本文介绍了PHP xmlreader 到数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下测试函数使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆