【问题标题】:Parsing deep XML with PHP SimpleXML and XPath使用 PHP SimpleXML 和 XPath 解析深度 XML
【发布时间】:2023-03-18 06:02:01
【问题描述】:

PHP 菜鸟在这里。我似乎误解了如何使用 XPath 获取 XML 节点的值,并且我无法找到一个 StackOverflow 答案来完全解决我做错的事情。

所以,使用 RPG Geek 的 API,我试图提取有关游戏 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 行,但我不知道怎么做。我做错了什么?

【问题讨论】:

    标签: php xml xpath simplexml


    【解决方案1】:

    使用完整路径查找所需节点:

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

    收集文档中的所有"average"节点:

    $rating = $rpggeekXML->xpath( '//average' );    
    
    echo $rating[0];
    

    【讨论】:

    • 工作得很好,我现在明白了我误解的地方。谢谢!
    【解决方案2】:

    我认为你的 xpath 语法是错误的。你可以试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      相关资源
      最近更新 更多