/ / Parsowanie głębokiego XML z PHP SimpleXML i XPath - php, xml, xpath, simplexml

Parsowanie głębokiego XML za pomocą PHP SimpleXML i XPath - php, xml, xpath, simplexml

PHP noob tutaj. Wydaje mi się, że nie rozumiem, jak uzyskać wartość węzła XML za pomocą XPath i nie udało mi się znaleźć odpowiedzi StackOverflow, która całkiem odpowiada na to, co robię źle.

Tak więc, używając API RPG Geek, staram się uzyskać pewne informacje o grze Strach. (Oto link do URI.)

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

Wiem, że z powodzeniem wciągam XML rpggeek, bo jeśli to zrobię var_dump($rpggeekXML);, Widzę wszystkie informacje, których oczekuję. Jeśli jednak to zrobię var_dump($rating); lub var_dump($usersrated);, zwraca array(0) { }. Wygląda na to, że muszę spieprzyć wiersze XPath, ale nie wiem, jak to zrobić.

Odpowiedzi:

2 dla odpowiedzi № 1

Użyj pełnej ścieżki, aby znaleźć żądany węzeł:

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

echo $rating[0];

Zebrać wszystkie "average" węzły w dokumencie:

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

echo $rating[0];

0 dla odpowiedzi nr 2

Myślę, że składnia xpath jest błędna. Możesz spróbować tego

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