Ответ 1
Если вы хотите работать с DOM, вам нужно понять концепцию. Все в документе DOM, включая DOMDocument, является Node.
DOMDocument - иерархическая древовидная структура узлов. Он начинается с корня Node. У этого корня node могут быть дочерние узлы, и все эти дочерние узлы могут иметь дочерние узлы самостоятельно. В основном все в DOMDocument
является типом node определенного типа, будь то элементы, атрибуты или текстовое содержимое.
HTML Legend:
/ \ UPPERCASE = DOMElement
HEAD BODY lowercase = DOMAttr
/ \ "Quoted" = DOMText
TITLE DIV - class - "header"
| \
"The Title" H1
|
"Welcome to Nodeville"
На приведенной выше диаграмме показан DOMDocument с некоторыми узлами. Существует корневой элемент (HTML) с двумя дочерними элементами (HEAD и BODY). Соединительные линии называются осями. Если вы будете следовать по оси до элемента TITLE, вы увидите, что у него есть один лист DOMText. Это важно, потому что это иллюстрирует часто забытую вещь:
<title>The Title</title>
не один, а два узла. DOMElement с дочерним элементом DOMText. Аналогично, этот
<div class="header">
действительно три узла: DOMElement с DOMAttr, содержащим DOMText. Поскольку все это наследует их свойства и методы от DOMNode, важно ознакомиться с классом DOMNode.
На практике это означает, что выбранный вами DIV связан со всеми другими узлами документа. Вы могли бы пройти весь путь до корневого элемента или до листьев в любое время. Это все. Вам просто нужно запросить или пересечь документ для необходимой информации.
Выполняете ли вы это путем итерации childNodes
DIV
или используйте getElementByTagName()
или XPath зависит от вас. Вам просто нужно понять, что вы не работаете с необработанным HTML, но с узлами, представляющими весь HTML-документ.
Если вам нужна помощь в извлечении определенной информации из документа, вам необходимо уточнить, какую информацию вы хотите извлечь из нее. Например, вы можете спросить, как получить все ссылки из таблицы, а затем мы могли бы ответить на что-то вроде:
$div = $dom->getElementById('showContent');
foreach ($div->getElementsByTagName('a') as $link)
{
echo $dom->saveXML($link);
}
Но если вы не более конкретны, мы можем только догадываться, какие узлы могут быть релевантными.
Если вам нужно больше примеров и фрагментов кода о том, как работать с DOM, просмотрите мои предыдущие ответы на связанные вопросы:
К настоящему моменту должен быть фрагмент для каждого базового и среднего UseCase, который у вас может быть с DOM.