从 HTML 中删除当前节点并使用 DOMDocument php 获取最终的 HTML

Remove current node from HTML and fetch the final HTML using DOMDocument php

我有一个 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>

现在我正在从上面的示例中找到包含 "data-permission" 属性(如(a、按钮等))的节点。
为此,我正在使用以下代码。现在我正在尝试做的是删除整个 <a>..</a> or <button>...</button> 或任何其他元素,如果它们包含 "data-permission" 属性并且删除后仅 return 剩余 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? 但它没有帮助。

替换要删除的节点值:$node->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

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