【问题标题】:Remove current node from HTML and fetch the final HTML using DOMDocument php从 HTML 中删除当前节点并使用 DOMDocument php 获取最终的 HTML
【发布时间】:2018-04-05 03:02:45
【问题描述】:

我有一个像下面这样的 html:

<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>ABC</td>
            <td><a data-permission="allow"></a></td>
        </tr>
        <tr>
            <td>B</td>
            <td><a data-permission="allow"></a></td>
        </tr>
        <tr>
            <td>C</td>
            <td><a data-permission="allow"></a></td>
        </tr>
        <tr>
            <td>D</td>
            <td><a data-permission="allow"></a></td>
        </tr>
        <tr>
            <td>E</td>
            <td><button type="button" data-permission="allow"></button></td>
        </tr>
    </tbody>
</table>

现在我正在从上面的示例中找到包含“数据权限”属性(如(a、按钮等)的节点。
为此,我正在使用以下代码。现在我要做的是删除整个&lt;a&gt;..&lt;/a&gt; or &lt;button&gt;...&lt;/button&gt; 或任何其他元素,如果它们包含“data-permission”属性并且删除后只返回剩余的 HTML。那么如何实现呢?

$dom = new DOMDocument;
$dom->loadHTML($output);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//@data-permission-id');
foreach ($nodes as $node) {
    echo $node->nodeValue;
    //$node->parentNode->removeChild($node); throws the error "Not Found Error"
}

注意-我试过 $node->parentNode->removeChild($node);内部循环,但它会引发错误。同样在删除该标签后,我想获得剩余的 HTML。我已经阅读了How to delete element with DOMDocument?,但它没有帮助。

【问题讨论】:

  • 你想删除 或者只删除标签,我可以通过 jQuery 来完成
  • 使用 PHP,在服务器端。 @Michel,我已经尝试过使用 $node->parentNode->removeChild($node);但它会抛出“未找到错误”。
  • 另外,删除后,我正在尝试获取剩余的 HTML,但我不知道这怎么可能。
  • 我认为这个问题不是重复的,因为它有差异。要求比较 stackoverflow.com/questions/15272726/…

标签: php html-parsing domdocument


【解决方案1】:

替换要删除的节点值:$node-&gt;nodeValue = "";

$dom = new DOMDocument;
$dom->loadHTML($output);
echo "Previous : ".PHP_EOL.$dom->textContent.PHP_EOL;
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//*[@data-permission='allow']");
foreach ($nodes as $node) {
    $node->nodeValue = "";
    $dom->saveHTML();
}

现场演示:https://eval.in/885719

使用您的表格数据进行现场演示:https://eval.in/885780

【讨论】:

猜你喜欢
相关资源
最近更新 更多
热门标签