Я изо всех сил пытаюсь понять, как использовать объект DOMElement в PHP. Я нашел этот код, но я не уверен, что он применим ко мне:
$dom = new DOMDocument(); $dom->loadHTML("index.php"); $div = $dom->getElementsByTagName('div'); foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; }
В основном мне нужно искать DOM для element
с определенным id
, после чего мне нужно извлечь нестандартный attribute
(то есть тот, который я составил и надел с JS), поэтому я могу видеть значение этого , Причина в том, что мне нужна одна часть из $_GET
и одна часть, которая находится в HTML, основанная на переадресации. Если бы кто-то мог просто объяснить, как я использую DOMDocument для этой цели, это было бы полезно. Я действительно борюсь за понимание того, что происходит и как правильно его реализовать, потому что я явно не делаю это правильно.
EDIT (Где я нахожусь на основе комментария):
Это мои коды кода 4-26 для справки:
<div id="column_profile"> <?php require_once($_SERVER["DOCUMENT_ROOT"] . "/peripheral/profile.php"); $searchResults = isset($_GET["s"]) ? performSearch($_GET["s"]) : ""; $dom = new DOMDocument(); $dom->load("index.php"); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; } } $div = $dom->getElementById('currentLocation'); $attr = $div->getAttribute('srckey'); echo "<h1>{$attr}</a>"; ?> </div> <div id="column_main">
Вот сообщение об ошибке, которое я получаю:
Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in ../public_html/index.php, line: 26 in ../public_html/index.php on line 10 Fatal error: Call to a member function getAttribute() on a non-object in ../public_html/index.php on line 21
getElementsByTagName
возвращает вам список элементов, поэтому сначала вам нужно выполнить цикл через элементы, а затем через их атрибуты.
$divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; } }
В вашем случае вы сказали, что вам нужен конкретный идентификатор. Предполагается, что они уникальны, поэтому для этого вы можете использовать (note, getElementById
может не работать, если вы сначала не $dom->validate()
):
$div = $dom->getElementById('divID');
Затем, чтобы получить свой атрибут:
$attr = $div->getAttribute('customAttr');
EDIT : $dom->loadHTML
просто считывает содержимое файла, он не выполняет их. index.php
не будет работать таким образом. Возможно, вам придется сделать что-то вроде:
$dom->loadHTML(file_get_contents('http://localhost/index.php'))
У вас не будет доступа к HTML, если перенаправление осуществляется с внешнего сервера. Позвольте мне сказать так: DOM не существует в момент, когда вы пытаетесь его разобрать. Что вы можете сделать, так это передать текст в парсер DOM, а затем манипулировать элементами таким образом. Или лучшим способом было бы добавить его в качестве другой переменной GET.
EDIT: Вы также знаете, что клиент может изменить HTML и передать все, что захочет? (Использование инструмента, такого как Firebug)