фильтрация и сортировка XML с помощью PHP

#php #mysql #xml #simplexml

#php #mysql #xml #simplexml

Вопрос:

Я пытаюсь найти способ фильтрации результатов в XML-файле, как я обычно делаю с MySQL и PHP.

Предполагая, что мой запрос «выберите ИДЕНТИФИКАТОР, ИМЯ из порядка ПОЛЬЗОВАТЕЛЕЙ по идентификатору ASC», как бы я запустил тот же запрос в моем XML-файле, если структура файла была примерно такой:

<пользователь> <ld>1</id> <имя>Боб</имя> </пользователь>

Большое спасибо 🙂

Ответ №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);
  
  • 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');
      

Результатом будет простой массив.

Жить дальше codepad.org (20:10 GMT 1: в настоящее время не работает): http://codepad.org/LSo2YX37

Комментарии:

1. Привет, еще раз, ComFreek, как мне затем распечатать / повторить эти данные?

2. @Tim Результатом является простой массив 😉