从 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();
}
使用您的 table 数据进行现场演示:https://eval.in/885780
我有一个 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();
}
使用您的 table 数据进行现场演示:https://eval.in/885780