PHP XML: как получить значение NodeValue от его братьев и сестер? - PullRequest
0 голосов
/ 02 сентября 2011

Пример xml:

<books>
  <book>
    <title>Hip Hop Hippo</title>
    <released>31-12-9999</released>
  </book>
  <book>
    <title>Bee In A Jar</title>
    <released>01-01-0001</released>
  </book>
</books>

Я хочу создать функцию, которая будет возвращать дату выпуска названия книги. Пример: я хочу получить дату выхода книги «Хип-хоп Бегемот».

Я знаю, что могу использовать simplexml и написать ->book[0]->released. Но это работает только тогда, когда у меня есть статический XML, и я знаю, где ->book[$i]->title соответствует «Hip Hop Hippo». Но не в динамическом случае. Я не могу предсказать каждое изменение, так как оно пришло от поставщика API. Это может быть book[1], book[2] и т. Д.

Что я должен написать в своей функции?

1 Ответ

3 голосов
/ 02 сентября 2011

Проверьте функции xpath http://php.net/manual/en/simplexmlelement.xpath.php

После этого вы сможете написать запрос: / books / book [title = "Хип-хоп Бегемот"]

$string = <<<XML
<books>
  <book>
    <title>Hip Hop Hippo</title>
    <released>31-12-9999</released>
  </book>
  <book>
    <title>Hip Hop Hippo</title>
    <released>31-12-2000</released>
  </book>
  <book>
    <title>Bee In A Jar</title>
    <released>01-01-0001</released>
  </book>
</books>
XML;

$xml = new SimpleXMLElement($string);

$result = $xml->xpath('/books/book[title="Hip Hop Hippo"]');

foreach($result as $key=>$node)
{
  echo '<li>';
  echo $node->title . ' / ' . $node->released;
  echo '</li>';
}
...