фильтрация и сортировка XML с помощью PHP - PullRequest
0 голосов
/ 03 ноября 2011

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

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

1 Bob

...

Большое спасибо:)

1 Ответ

1 голос
/ 03 ноября 2011

Вы можете использовать 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

...