【问题标题】:Acquire the variable id name of children dom elements in PHP获取PHP中子dom元素的变量id名称
【发布时间】:2013-12-20 21:02:23
【问题描述】:

我正在尝试解析网站以获取特定的 ID 号,而我感兴趣的网站部分如下所示:

<div class="clearfix" id="topCurrentGamesList">
    <div class="topCurrentGames" id="topCurrentGame38632" data-game-id="4154">
    </div>
    <div class="topCurrentGames" id="topCurrentGame38639" data-game-id="4161">
    </div>
</div>

现在我正在尝试获取放置在孩子 ID 中的数字,在本例中名称为 3863238639。下面的代码我用来选择两个所需 div 的父 div,因为它有一个静态名称。

$gameID = $dom->getElementById( 'topCurrentGamesList' );

虽然这两个子 div 会不时获得一个新的 id,但我想提取它。它仍然是我应该使用的 DOM,如果是的话,如何使用?还是有更优雅(更简单)的解决方案?

print_r($gameID);显示这个:

DOMElement Object
(
    [tagName] => div
    [schemaTypeInfo] => 
    [nodeName] => div
    [nodeValue] => 




    [nodeType] => 1
    [parentNode] => (object value omitted)
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => (object value omitted)
    [nextSibling] => (object value omitted)
    [attributes] => (object value omitted)
    [ownerDocument] => (object value omitted)
    [namespaceURI] => 
    [prefix] => 
    [localName] => div
    [baseURI] => 
    [textContent] => 




)

【问题讨论】:

    标签: php dom xpath domdocument


    【解决方案1】:

    是的,使用 DOMDocument 和 DOMXPath 适合此任务。您只需要遍历每个选定的节点并收集“id”属性:

    <?php
    
    $xpath = new DOMXPath($dom);
    $nodes = $xpath->query('//div[@id="topCurrentGamesList"]/div[@class="topCurrentGames"]');
    
    foreach ($nodes as $node) {
      $id = preg_replace('/^topCurrentGame/', '', $node->getAttribute('id'));
      // do something with $id
    }
    

    【讨论】:

    • 谢谢,看起来不错!我刚刚发现,在我渴望使 html 可读的过程中,我删除了很多内容,而该类改为“topCurrentGames arenaActive”。我如何在这里处理名称中的空格?我尝试使用它,但 DOMNodeList 对象为空。
    • 您要么需要完全匹配类属性(例如//div[@id="topCurrentGamesList"]/div[@class="topCurrentGames arenaActive"]),使用不太具体的选择器(例如/div[@id="topCurrentGamesList"]/div[contains(@class, "topCurrentGames")]),或者将类属性排除在选择器之外(例如@ 987654324@).
    • 嗯,我已经尝试了这些以及我能想到的所有其他方法,但 DOMNodeList 总是空着,奇怪。
    • 如果我运行$xpath-&gt;query('//div[contains(@id, "Game")]'); print_r($nodes);,我得到的结果只是topCurrentGamesList,而不是其他两个。
    • 发现问题,该部分网站的代码是用 javascript 生成的,因此当我使用 loadHTML 解析页面时不可见。该死的。
    猜你喜欢
    • 2011-02-08
    • 2013-01-22
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多