php - 使用 PHP 过滤和排序 XML

标签 php mysql xml simplexml

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

假设我的查询是“select ID, NAME from USERS order by ID ASC”,如果文件结构如下所示,我将如何在 XML 文件上运行相同的查询:

<用户> 1 <名字>鲍勃

...

非常感谢:)

最佳答案

您可以使用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);
  • 从用户中选择 * 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);
    
  • 从用户中选择 * WHERE id=2

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

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

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

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

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

关于php - 使用 PHP 过滤和排序 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000188/

相关文章:

php - str_replace 换行?

php - 硬编码的用户/密码适用于 MySQL 连接,但文件中的字符串不适用于

mysql - 如何使用 sequelize 用外键值填充表?

php - 获取行及其之间的关系

php - PHP 的 SQLite3Stmt 类会导致锁定问题吗?

PHP和pgbouncer处于事务模式: current transaction is aborted

MySQL:计算多个表中的重复行而不增加计数

c# - 如何使用 XML 序列化抽象创建单例

java - JAXB - 如何使用 <set varname = "String"value = name "String2"> 元素从对象创建 xml

android - 键盘打开时,带有 fragment 的 Activity 不会调整大小