PHP получить значение HTML-тега с помощью PHPDocumente () - PullRequest
0 голосов
/ 12 июня 2018

это простой HTML-код, который я хочу получить sorry, promise и back-link значения из этого

<div id="core">
  <h1 id="sorry">Sorry, something went wrong.</h1>
  <p id="promise">
    We're working on it and we'll get it fixed as soon as we can.
  </p>
  <p id="back-link">
    <a id="back" href="https://www.facebook.com/">Go Back</a>
  </p>
  <div id="footer">
    Facebook
    <span id="copyright">
      © 2018
    </span>
    <span id="help-link">
      ·
      <a id="help" href="https://www.facebook.com/help/">Help Center</a>
    </span>
  </div>
</div>

с кодом ниже, я получаю этот результат для одного из них, например:

DOMElement Object
(
    [tagName] => p
    [schemaTypeInfo] => 
    [nodeName] => p
    [nodeValue] => 
        Go Back

    [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] => p
    [baseURI] => 
    [textContent] => 
        Go Back

)

, но это единственный объект из всех атрибутов, и это не то, что я хочу иметь, и я хочу получить значения sorry, promise и back-link из этого HTML

мой код:

<code><?php
$url = "http://localhost/error.html";
$html = file_get_contents($url);
$doc = new DOMDocument(); // create DOMDocument
libxml_use_internal_errors(true);

$doc->loadHTML($html); // load HTML you can add $html
//libxml_clear_errors();

if ($html) {
    $divs = $doc->getElementById('core');

    $xpath = new DOMXPath($doc);

    $backLink = $xpath->query('//p[@id="back-link"]');

    //$sorryId = $xpath->query('//h1[@id="sorry"]');
    //$promiseId = $xpath->query('//p[@id="promise"]');


    $node = $backLink->item(0);
    $href = $node->getAttribute('href');
    echo '<pre>';print_r($node);echo '
';}?>

, пожалуйста, помогите мне исправить этот код, чтобы получить значения из HTML, заранее спасибо

1 Ответ

0 голосов
/ 12 июня 2018

Поскольку id должен быть уникальным на HTML-странице, вы можете использовать простые getElementById:

if ($html) {
    $sorry = $doc->getElementById('sorry');
    var_dump($sorry->textContent);

    $promise = $doc->getElementById('promise');
    var_dump($promise->textContent);

    // here I use `back` id as you need link 
    // from this element, not from `back-link`
    $backLink = $doc->getElementById('back')->getAttribute('href');
    var_dump($backLink);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...