#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 Результатом является простой массив 😉