2015-05-15 2 views
2

PHP noob здесь. Я, кажется, неправильно понимаю, как получить значение узла XML с помощью XPath, и я не смог найти ответ StackOverflow, который вполне соответствует тому, что я делаю неправильно.Анализ глубокого XML с помощью PHP SimpleXML и XPath

Итак, используя API RPG Geek, я пытаюсь получить некоторую информацию об игре Dread. (Here's a link to the URI.)

$rpggeekXML = simplexml_load_file('https://www.rpggeek.com/xmlapi/boardgame/166952?&stats=1'); 
$rating = $rpggeekXML->xpath('ratings/average'); 
$usersrated = $rpggeekXML->xpath('ratings/usersrated'); 

Я знаю, что я успешно вытягивать в rpggeek XML, потому что если я var_dump($rpggeekXML);, я могу видеть всю информацию, я ожидал. Однако, если я делаю var_dump($rating); или var_dump($usersrated);, он возвращает array(0) { }. Похоже, я, должно быть, закручиваю линии XPath, но я не могу понять, как это сделать. Что я делаю не так?

ответ

2

Используйте полный путь, чтобы найти нужный узел:

$rating = $rpggeekXML->xpath('boardgame/statistics/ratings/average'); 

echo $rating[0]; 

Соберите все "average" узлы в документе:

$rating = $rpggeekXML->xpath('//average');  

echo $rating[0]; 
+0

работал отлично, и теперь я вижу, где я был недоразумением вещи. Благодаря! – James

+0

@James pls считают, что этот ответ можно щелкнуть по метке влево – michi

0

Я думаю, что синтаксис xpath неверен. Вы можете попробовать это

$rpggeekXML = simplexml_load_file('https://www.rpggeek.com/xmlapi/boardgame/166952?&stats=1'); 
$rating = $rpggeekXML->xpath('//ratings/average'); 
$usersrated = $rpggeekXML->xpath('//ratings/usersrated');