[DocumentElement] DOMDocument имеет ложное содержание, в то время как [textContent] включает весь текст страницы
Я пытался выбрать контент на странице HTML. Проблема является результатом DOMDocument($html)
не имеет элементов в своем узле [documentElement]. Однако все тексты HTML-страницы (кроме HTML-тегов) находятся внутри [textContent]
, Вот как я сделал DOMDocument
объект:
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$html = file_get_contents("https://example.com");
$doc->loadHTML($html);
И это выводимый объект:
DOMDocument Object (
[doctype]=> (object value omitted)
[implementation]=> (object value omitted)
[documentElement]=> (object value omitted)
[actualEncoding]=> utf-8
[encoding]=> utf-8
[xmlEncoding]=> utf-8
[standalone]=> 1
[xmlStandalone]=> 1
[version]=>
[xmlVersion]=>
[strictErrorChecking]=> 1
[documentURI]=>
[config]=>
[formatOutput]=>
[validateOnParse]=>
[resolveExternals]=>
[preserveWhiteSpace]=> 1
[recover]=>
[substituteEntities]=>
[nodeName]=> #document
[nodeValue]=>
[nodeType]=> 13
[parentNode]=>
[childNodes]=> (object value omitted)
[firstChild]=> (object value omitted)
[lastChild]=> (object value omitted)
[previousSibling]=>
[nextSibling]=>
[attributes]=>
[ownerDocument]=>
[namespaceURI]=>
[prefix]=>
[localName]=>
[baseURI]=>
[textContent]=> blah blah blah
Таким образом, я не могу просматривать теги HTML и выбирать конкретный контент. четное new DOMXpath($doc)
не возвращает полезный контент, который я предполагаю, потому что DOMXpath($doc)
зависит от [documentElement]
узел DOMDocument
объект. Вот вывод var_dump(new DOMXpath($doc));
object(DOMXPath)#2 (1) { ["document"]=> string(22) "(object value omitted)" }
Я пробовал оба curl
а также file_get_contents
методы для получения содержимого HTML, и я уверен, что содержимое HTML является правильным (я смог скопировать страницу HTML в файл PHP с помощью print_r($html)
, Кроме того, я прочитал несколько ответов по Stackru, но не смог решить проблему.
1 ответ
printr
и DOMDocument не особенно полезны, информация есть, но она не очень хорошо отображается ((object value omitted)
это намек).
Если вместо этого вы начинаете использовать методы DOMDocument, saveHTML
или же saveXML
, Они отформатируют фактический контент для вас... Если вы попробуете
$html = file_get_contents("https://example.com");
$doc->loadHTML($html);
echo "print_r()...";
print_r($doc);
echo "saveHTML()...";
echo $doc->saveHTML();
Вы должны увидеть разницу.
Следует отметить, что для вывода из определенной точки (например, из результата XPath) вы используете
echo $doc->saveHTML( $xpResultNode );
Изменить: с более конкретным кодом:
$doc = new DOMDocument();
$html = file_get_contents("https://example.com");
$doc->loadHTML($html);
$xp = new DOMXpath($doc);
$node = $xp->query('//*[@id="datacontainer"]/div[2]/table/tbody/tr[3]/td[4]/table/tr[2]/td');
echo $doc->saveHTML($node[0]);
Я немного изменил запрос XPath, так как на последнем уровне таблицы нет тега tbody.