Если вы хотите работать с DOM, вы должны понять концепцию.Все в документе DOM, включая DOMDocument, является узлом.
DOMDocument - это иерархическая древовидная структура узлов.Начинается с корневого узла.Этот корневой узел может иметь дочерние узлы, и все эти дочерние узлы могут иметь дочерние узлы самостоятельно.В основном все в DOMDocument
- это какой-то тип узла, будь то элементы, атрибуты или текстовое содержимое.
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">
на самом деле представляет собой три узла: элемент DOME с элементом 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, просмотрите мои предыдущие ответы на связанные вопросы:
Byтеперь должен быть фрагмент для каждого базового и среднего UseCase, который вы можете иметь с DOM.