- 16, May 2024
- #1
Как использовать класс атрибута, чтобы получить внутренний HTML-файл по заданному URL-адресу и HTML-файлу? Я искал в Интернете четкое объяснение.
Где я ошибаюсь (я не привык к «->» и «=>», поскольку не знаю, что они представляют или делают):
<?php
//should come back to here
function walkDOMForTagAndClass($element, $tagName, $class, $callback) {
if ($element->nodeType !== 1) return false; // invalid element
// we force case as XML vs. SGML are inconsistent on ths
$tagName = strtoupper($tagName);
if ($walk = $element->firstChild) do {
if (
($walk->nodeType == 1) &&
(strtoupper($walk->nodeName) == $tagName) &&
($walk->attributes->getNamedItem('class') == $class)
) $callback($walk);
} while (
$walk = $walk->firstChild || $walk->nextSibling || (
$walk->parentNode == $element ? false : $walk->parentNode.nextSibling
)
);
}
$file = "[URL='https://lumtu.com/yti/SL11LSlZodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9uZ3M9SDEmdDmED']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=H1&t=KJV[/URL]";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
walkDOMForTagAndClass(
$doc,
'div',
//'columns tablet-8 small-10 tablet-order-3 small-order-2',
'nocrumbs',
function($file) {
// do whatever it is you want with the matches here.
}
);
/*$html = "[URL='https://lumtu.com/yti/SL11LSlZodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9uZ3M9SDEmdDmED']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=H1&t=KJV[/URL]";
$dom = new DOMDocument();
$dom->loadHTML($html);*/
//Evaluate Anchor tag in HTML
$xpath = new DOMXPath($doc);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
//remove and set target attribute
$href->removeAttribute('target');
$href->setAttribute("target", "_blank");
$newURL=$url."/newurl";
//remove and set href attribute
$href->removeAttribute('href');
$href->setAttribute("href", $newURL);
}
// save html
$file=$doc->saveHTML();
echo $file;
?>
Код (разметка):