PHP如何分离DOM元素并用php显示它

时间:2013-11-27 14:10:56

标签: php dom element

如何分离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元素然后显示它?

  • 如何获取元素的其余部分然后显示它?

2 个答案:

答案 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>