2016-08-17 52 views
-1

我想用这些条件在一起的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> 

我想将它们全部删除。

回答

0

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