如何使用php从xpath中获取结果?

如何使用php从xpath中获取结果?,php,jquery,html,xpath,Php,Jquery,Html,Xpath,我正试图用php将文本从xpath/html中提取出来,但没有成功的想法 例如: 我的xpath(这是正确的,我已经仔细检查过了) /*[@id=“bodyContent”]/div/div/div[3]/div[1]/div[1]/div[2]/div[1]/div/b 我想使用php获得一个显示在这里的结果result 下面是我的代码: <?php public function getNortonSafe($domain) { try { $callback_url

我正试图用php将文本从xpath/html中提取出来,但没有成功的想法

例如:

我的xpath(这是正确的,我已经仔细检查过了)
/*[@id=“bodyContent”]/div/div/div[3]/div[1]/div[1]/div[2]/div[1]/div/b

我想使用php获得一个显示在这里的结果
result

下面是我的代码:

<?php
public function getNortonSafe($domain)
{
  try
  {
    $callback_url = "https://safeweb.norton.com/report/show?url=google.com"; //. $domain;

    $curl_response = $this->curl->get($callback_url);

    if ($curl_response->headers['Status-Code'] == "200") {

      libxml_use_internal_errors(TRUE);
      $this->dom_doc->loadHTML($curl_response);
      libxml_use_internal_errors(FALSE);

      $xpath = new DOMXPath($this->dom_doc);
      $tmp = $xpath->query('//*[@id="bodyContent"]/div/div/div[3]/div[1]/div[1]/div[2]/div[1]/div/b')->item(0)->textContent);

      $tmp = explode(' ', trim($tmp));
      $norton_site_test = str_replace(",", "", $tmp[0]);

    } else {
      $norton_site_test = "0";
    }

    $response = array(
      'status' => 'success',
      'data' => array(
        'norton_site_test' => filter_var($norton_site_test, FILTER_SANITIZE_STRING)
      )
    );

  }
  catch (Exception $e)
  {
    $response = array(
      'status' => 'error',
      'msg' => $e->getMessage()
    );
  }
  return $response;
}
?>

HTML


此处为结果文本


执行
$xpath->query('some xpath here')->text(0)
行时发生错误:
致命错误:调用未定义的方法DOMNodeList::text()
。请检查您的PHP设置

方法返回只有
方法的
DOMNodeList
对象(请参阅)。 您需要拨打:

$xpath->query('somexpath here')->item(0)->textContent


从收到的DOMNodeList对象中获取第一个节点的文本内容。

只需更新此代码,感谢@camelsWrite-现在可以使用了!使用此干净的代码并经过测试:


您的XPath查询非常复杂,您确定不能简化它吗?这样的深度嵌套非常脆弱,我尝试过了,但仍然不起作用-我想我在这里遇到了一个问题`'norton_site_test'=>filter_var($norton_site_test)`如何过滤
文本
?提前感谢我使用了
filter\u var($norton\u site\u test,textContent)
使用这个函数就足够了。
<body>
<p id="norton_site_test">  result-text-here </p>
</body>
    public function getNortonSafe($domain)
    {
        try
        {
            $callback_url = "https://safeweb.norton.com/report/show?url= . $domain; //e.g $url: "https://safeweb.norton.com/report/show?url=google.com

            $curl_response = $this->curl->get($callback_url);

            if ($curl_response->headers['Status-Code'] == "200") {

                libxml_use_internal_errors(TRUE);
                $this->dom_doc->loadHTML($curl_response);
                libxml_use_internal_errors(FALSE);

                $xpath = new DOMXPath($this->dom_doc);
                $tmp = $xpath->query('//*[@id="bodyContent"]/div/div/div[3]/div[1]/div[1]/div[2]/div[1]/div/b')->item(0)->textContent);

                $tmp = explode(' ', trim($tmp));
                $norton_site_test = str_replace(",", "", $tmp[0]);

            } else {
                $norton_site_test = "0";
            }

            $response = array(
                'status' => 'success',
                'data' => array(
                    'norton_site_test' => filter_var($norton_site_test)
                )
            );

        }
        catch (Exception $e)
        {
            $response = array(
                'status' => 'error',
                'msg' => $e->getMessage()
            );
        }
        return $response;
    } ?>