如何使用XPath选择两个特定的标记类并删除所有?

时间:2016-08-17 13:30:51

标签: php html xml dom xpath

我想将这些条件一起用于PHP中的XPath查询

 //*[contains(concat(' ', normalize-space(@class), ' '), ' metadata ')]

*[contains(concat(' ', normalize-space(@class), ' '), ' mw-editsection ')]

我该怎么办?

我在下面尝试了一些但不起作用:

$dom = new DOMDocument;
$dom->loadHTML( mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8"));
$xPath = new DOMXPath($dom);
$nodes = $xPath->query('//*[contains(concat(\' \', normalize-space(@class), \' \'), \' metadata \') and //*contains(concat(\' \', normalize-space(@class), \' \'), \' mw-editsection \ ]');
if($nodes->item(0)) {$nodes->item(0)->parentNode->removeChild($nodes->item(0));}
$content = $dom->saveHTML();

我的dom结构中有多个metadatamw-editsection类,我想删除所有元数据和mw-editsection类

<body>
...

<div class="metadata"> abc </div>
<div class="mw-editsection"> xyz </div> 
...
<div class="metadata"> 123 </div>
<div class="metadata"> 456 </div>
<div class="metadata"> 789 </div>
<div class="mw-editsection"> abc </div> 
...
</body>

我想删除所有这些内容。

1 个答案:

答案 0 :(得分:0)

您的XPath使用逻辑and,但您的示例表明您需要逻辑or。使用and只会选择div元素,例如<div class="metadata mw-editsection"/>,您的示例中没有显示任何元素。