PHP xmlreader 到数组

2023-11-30

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

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

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() 返回这个数组

Array
(
    [0] => Array
        (
            [id] => 345
        )

    [1] => Array
        (
            [id] => 123
        )

    [2] => Array
        (
            [id] => 789
        )
)

如何获取用户名键和值?

Array
(
    [0] => Array
        (
            [id] => 345
            [username] => name1
        )

    [1] => Array
        (
            [id] => 123
            [username] => name2
        )

    [2] => Array
        (
            [id] => 789
            [username] => name3       
        )
)

添加到何塞的答案

// needed to end element
else if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "username")
{
    break;
}

这应该有效。

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 == "用户名")

$name = $reader->name;

$var[$i][$name] = $reader->value;

if($name == "用户名") $i++;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP xmlreader 到数组 的相关文章

  • 在 Android 中存储和访问 XML 的最佳方式是什么?

    虽然我意识到资源本身是在 XML 文件中定义的 但如果我有一个我希望使用的自己类型的 XML 文件 我是否应该将它们存储在 res xml 中 有没有更好的方法来做到这一点 例如使用资产 然后将它们加载为二进制文件以供另一个 XML 库解析
  • file_get_contents 大文件上传

    我正在尝试使用 fsockopen 上传 2GB 以上的大文件 但 file get content 出现以下错误 我无法在内存中存储大文件 我需要分块发送数据 但不知道如何执行此操作 请问有人可以指导我吗 致命错误 允许的内存大小 134
  • 无法在jspdf中加载多个图像

    我正在尝试加载动态生成的多个图像 我想将这些图像转换为 PDF 格式 HTML 代码如下
  • 自定义帖子类型的 WordPress 自定义字段

    过去有几个人出现过这个问题 但他们的问题的解决方案对我来说不起作用 我已经尝试了很多 在 WordPress 中 我创建了 3 种自定义帖子类型 1 代表 视频 新闻 和 音乐 每个内容都发布到自己的页面 我想添加自定义字段 这样我就可以为
  • 在 Laravel 中的编辑表单上获取选定选项

    我的网站订单有一个可编辑的表单 并且有以下字段 User quantity note status 我在此表单中还有其他选项 但只有这些字段对我来说很重要 以便能够获取默认值 例如 我希望能够查看用户默认订购的数量 然后我可以更改它或保留它
  • div 中的文本字符有限,添加“阅读更多”链接并在单击链接时显示所有字符

    我有一个 div 里面有文本 使用 PHP 和 MySQL 显示 结构如下 div class description p Here is a lot of text p div 我想在 p 标签内的文本超过 100 个字符时显示 阅读更多
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • 使用 XProc 进行 XML 流处理

    我正在玩xproc http www w3 org TR xproc XML 管道语言和http xmlcalabash com http xmlcalabash com 我想找到一个流式传输大型 xml 文档的示例 例如 给定以下内容hu
  • Cakedc.users => 总是重定向到主页

    我在新的 Cakephp 安装上使用插件 CakeDC Users 我有两个控制器 PagesController php CardsController php Pages 有 1 个操作 Beta 它是主页 Cards 有两个操作 索引
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • Laravel/00webhost 错误 404。在此服务器上找不到请求的 URL

    1 将我的文件上传到 000webhost 我将公用文件夹中的所有文件放置到公共 html然后我创建了一个名为laravel我在那里上传了所有其他文件 这是我的目录结构 laravel app 引导程序 config 公共 html 索引
  • PHP-docker容器中的环境变量

    我想在我的 docker 容器中显示一个环境变量 PHP 脚本如下所示 我使用 OpenShift 来启动容器 PHP 容器显示 env is 现在我更改容器的 dc 配置 oc env dc envar USER Pieter deplo
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • Paypal 将钱从一个帐户转移到另一个帐户

    我知道这个建议如何汇款至任何 PayPal 账户 https stackoverflow com questions 1559808 paypal api send money to any paypal account但到目前为止我所尝试
  • 在 PHP 中接受带有小数点和千位分隔符的国际数字

    对于用户可以输入能量值来计算相应费用的在线计算器 我需要 PHP 脚本来接受各种用户输入 200 万又四分之一焦耳 的值可以输入为 2000000 25 默认表示法 2 000 000 25 带千位分隔符 2000000 25 逗号作为小数
  • PHP 中的encodeURI() ?

    PHP 中是否有一些不编码的encodeURI 函数 我现在用这个 function encodeURI url http php net manual en function rawurlencode php https develope
  • 通过身份验证保护 CodeIgniter 2 应用程序的正确方法是什么?

    I have Ion Auth http benedmunds com ion auth 正确安装并在我的服务器上运行 我也有默认的代码点火器2 新闻 教程在同一个 CI 安装中工作 我只是在玩 并对使用身份验证系统 封闭 或保护整个应用程
  • 为什么这评估为 true

    为什么这评估结果为真
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co

随机推荐