【问题标题】:Get link of inner div attribute using dom document and xpath php使用dom文档和xpath php获取内部div属性的链接
【发布时间】:2017-05-08 13:34:17
【问题描述】:

我有以下 HTML:

<div id="unique_id" style="display: none;">   
  <div>
    <div>
        <div>
            <div class="viewLink">
              <div class="viewBuy" onclick="javascript:window.location='https://google.com';return false;">View / Buy</div>
            </div>
        </div>
    </div>
</div>     

我正在尝试从 div id='unique_id' 内的 div class='viewBuy' 获取 onclick 属性值,但结果为空。任何帮助将不胜感激。

$dataObj = new DOMDocument();
$internalErrors = libxml_use_internal_errors(true);
$dataObj->loadHtml($HTML);

$idName = 'unique_id';
$xpath = new DOMXPath($dataObj);
$viewAllLink = $xpath->query("//*[@id='$idName')]");

if ($viewAllLink) {
foreach ($viewAllLink as $feeditem) {
        $urlAttribute = $feeditem->getAttribute('onclick');
        if ($urlAttribute) break;
    }
}

【问题讨论】:

    标签: php xpath domdocument


    【解决方案1】:

    这里我们使用DOMDocumentDOMXPath 来获取属性值。

    Try this code snippet here

    <?php
    ini_set('display_errors', 1);
    $string='<div id="unique_id" style="display: none;">   
      <div>
        <div>
            <div>
                <div class="viewLink">
                  <div class="viewBuy" onclick="javascript:window.location=\'https://google.com\';return false;">View / Buy</div>
                </div>
            </div>
        </div>
    </div>
    </div>';
    $output=null;
    
    $domdocument= new DOMDocument();
    $domdocument->loadXML($string);
    
    $domXpath= new DOMXPath($domdocument);
    $result=$domXpath->query('//div[@id="unique_id"]');
    
    $domXpath= new DOMXPath($domdocument);
    $result=$domXpath->query('//div[@class="viewBuy"]',$result->item(0));
    echo $output =$result->item(0)->getAttribute("onclick");
    

    输出: javascript:window.location='https://google.com';return false;

    【讨论】:

    • 感谢您的回答,但我的问题是我有很多带有 div class="viewBuy" 的 div。所以我必须先用 id 过滤它。
    • @Ravistm 我已经更新了我的帖子,你现在可以查看。
    • 如果我有很多像我在我的问题中编辑的 div 怎么办,对不起,我忘了提及它
    【解决方案2】:

    @Sahil,感谢您提供多个答案。我只是想发布您给我的其他 2 个答案,这可能对其他人有用。

    解决方案1

    $dataObj = new DOMDocument();
    $internalErrors = libxml_use_internal_errors(true);
    $dataObj->loadHtml($HTML);
    
    $idName = 'unique_id';
    $xpath = new DOMXPath($dataObj);
    $viewAllLink = $xpath->query("//div[@id='$idName']/div/div/div/div/div[@class='viewBuy']")->item(0)->getAttribute("onclick");
    

    解决方案2

    $dataObj = new DOMDocument();
    $internalErrors = libxml_use_internal_errors(true);
    $dataObj->loadHtml($HTML);
    
    $idName = 'unique_id';
    $xpath = new DOMXPath($dataObj);
    $viewAllLink = $xpath->query("//div[@id='$idName')]/div");
    getAttribute($viewAllLink);
    echo $output;
    
    function getAttribute($result)
    {
        global $domdocument,$output;
        if($result->length==1 && empty($result->item(0)->getAttribute("onclick")))
        {
            $domXpath= new DOMXPath($domdocument);
                $result=$domXpath->query('//div[@class="viewBuy"]',$result->item(0));
            getAttribute($result);
        }
        else
        {
            $output = $result->item(0)->getAttribute("onclick");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2016-04-05
      • 2012-07-18
      • 2018-05-29
      • 2012-04-23
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多