使用 PHP 过滤和排序 XML

发布于 2024-12-13 13:24:55 字数 252 浏览 0 评论 0原文

我正在尝试找到一种在 XML 文件中过滤结果的方法,就像我通常使用 MySQL 和 PHP 所做的那样。

假设我的查询是“select ID, NAME from USERS order by ID ASC”,如果文件结构类似于:

, 我将如何在 XML 文件上运行相同的查询?1 <姓名>鲍勃

...

非常感谢:)

I'm trying to find a way of filtering results in a XML file as I would normally do with MySQL and PHP.

Assuming my query is "select ID, NAME from USERS order by ID ASC" , how would I run the same query on my XML file if the file structure was something like:

<user>
<ld>1</id>
<name>Bob</name>
</user>

...

Many thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双马尾 2024-12-20 13:24:55

您可以使用 XPath

示例

给定以下 XML 和 PHP:

$xml = <<< EOT
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<userlist>
  <users>
    <user>
      <id>1</id>
      <name>Bob</name>
    </user>
    <user>
      <id>2</id>
      <name>David</name>
    </user>
  </users>
</userlist>
EOT;

$x_obj = simplexml_load_string($xml);
  • SELECT * FROM users ORDER BY id ASC

    $result = $x_obj->xpath('//用户');
    
    函数 cmp($a, $b)
    {
      if ( $a->id > $b->id) 返回 -1;
      if ($a->id < $b->id) 返回 1;
      返回0;
    }
    usort($结果, cmp);
    
  • 从用户WHERE id=2中选择*

    $result = $x_obj->xpath('//user[id=2]');
    
  • 从 id=2 的用户中选择名称

    $result = $x_obj->xpath('//user[id=2]/name');
    
  • 从用户中选择 id,其中名称='Bob'

    $result = $x_obj->xpath('//user[name="Bob"]/id');
    

结果将是一个简单的数组。

在 codepad.org 上直播(20:10 GMT+1:目前已关闭):http://codepad.org/LSo2YX37

You can use XPath.

Examples

Given this XML and PHP:

$xml = <<< EOT
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<userlist>
  <users>
    <user>
      <id>1</id>
      <name>Bob</name>
    </user>
    <user>
      <id>2</id>
      <name>David</name>
    </user>
  </users>
</userlist>
EOT;

$x_obj = simplexml_load_string($xml);
  • SELECT * FROM users ORDER BY id ASC

    $result = $x_obj->xpath('//user');
    
    function cmp($a, $b)
    {
      if ( $a->id > $b->id) return -1;
      if ( $a->id < $b->id) return 1;
      return 0;
    }
    usort($result, cmp);
    
  • SELECT * FROM users WHERE id=2

    $result = $x_obj->xpath('//user[id=2]');
    
  • SELECT name FROM users WHERE id=2

    $result = $x_obj->xpath('//user[id=2]/name');
    
  • SELECT id FROM users WHERE name='Bob'

    $result = $x_obj->xpath('//user[name="Bob"]/id');
    

The result will be a simple array.

Live on codepad.org (20:10 GMT+1: currently down): http://codepad.org/LSo2YX37

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文