如何分离DOM元素并用php显示它
我有一个文件target.php
我想从中获取所有div元素并将其存储在变量$ div中以便稍后显示
我想将其余元素存储在变量$ rest中并稍后显示
我已经瞪眼但我仍然不知道该怎么做
这是我的代码
target.php
<?php echo "something"?>
<h1> its h1 </h1>
<h1> its h1 </h1>
<div> its div </div>
<div> its div </div>
index.php (从这里开始)
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('target.php');
echo $dom->saveHTML();
$div =$dom->getElementsByTagName('div'); //take all div element
$rest; //take the rest of element
?>
<hr />
<div> <?php //echo all div element ?> </div>
<hr />
<div> <?php //echo the rest of element?> </div>
</body>
</html>
我真的不知道该怎么做
如何获取所有div元素然后显示它?
如何获取元素的其余部分然后显示它?
答案 0 :(得分:1)
您正在通过文件系统加载您的html文件,因为php内部永远不会被执行。并且dom无法在节点内部使用php代码构建一个很好的对象。你必须使用:
$htmlfile = file_get_contents('http://www.example.com/target.php');
$dom->loadHTMLFile($htmlfile);
dom返回一个你可以用foreach遍历的对象。
解释domdocument
这个mabay令人困惑但你不能在domdocument对象上使用print_r或var_dump。很抱歉给您带来不便。
但你可以通过它们看看我的例子:
<强> target.php 强>
<?php echo "<h1>dsasdasd</h1>"?>
<h1>header</h1>
<h1>also header</h1>
<div>contentindicshit blabla</div>
<div>I am a hobbit (no I am not!)</div>
<div>lalalalal</div>
<强>的index.php 强>
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$htmlfile = file_get_contents('http://localhost:8080/shit/node.php');
$dom->loadHTML($htmlfile);
$div = $dom->documentElement->getElementsByTagName('div');
echo $div->item(1)->nodeValue; // just by singe selecting (litle bit strange syntax near item(1)->nodeValue)
echo '<br><br>';
//by looping
foreach($div as $item){
echo "$item->nodeValue <br>";
}
?>
答案 1 :(得分:1)
试试这个,因为$div
变量是DOMNodeList。对于其余的,您可以逐个从目标文件中获取每个可能的元素列表并迭代它。我的想法是在回显之后删除div,但是我找不到如何直接从DOMDocument中删除节点,所以我使用<span>
来包装所有内容。
<强>的index.php 强>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
$dom = new DOMDocument(); // Create DOMDocument object.
$dom->loadHTMLFile('target.php'); // Load target file.
$div =$dom->getElementsByTagName('div'); // Take all div elements.
$neutralNode = $dom->getElementsByTagName('span')->item(0); // Get element which holds all important nodes for us.
?>
<hr />
<div>
<?php
$divsToRemove = array(); // Create array to store div nodes.
foreach($div as $el) { // Iterate over divs DOMNodeList.
echo '<div class="' . $el->getAttribute('class') . '" style="' . $el->getAttribute('style') . '">' . $el->nodeValue, PHP_EOL . '</div>'; // Echo out div.
$divsToRemove[] = $el; // Store current div in array.
}
?>
</div>
<hr />
<div>
<?php
foreach($divsToRemove as $divToRemove) // Loop over divs to remove them.
$neutralNode->removeChild($divToRemove); // Remove target divs from node which holds all.
echo $dom->saveHTML(); // Echo rest of HTML.
?>
</div>
</body>
</html>
<强> target.php 强>
<span>
<?php echo "something"?>
<h1> its h1 </h1>
<h1> its h1 </h1>
<div style="color: red;"> its div </div>
<div style="color: blue; text-decoration: underline;"> its div </div>
</span>