2014-02-15 50 views
2

目前的结构看起来像在DomXPath删除最后一个子

<div class="..."> 
    //more html 
    <div class="message-right"> 
     <div class="item1"> //more html </div> 
     <div class="item2"> //more html </div> 
     <div class="item3"> //more html </div> 
    </div> 
    //more html 
</div> 

我希望能够拿到类的消息右“里面的html内容,并删除最后一个孩子。 (在这种情况下,“项目3”)

我应该留下的HTML代码“物品1”和“ITEM2”

到目前为止,我有

$dom = new DomDocument(); 
@$dom->loadHTML($html); 
$finder = new DomXPath($dom); 
$classname = "message-right"; 
$nodes = $finder->query("//*[contains(@class, '$classname')]"); 

//this is where I am stuck, need to remove the last child, 'item3'  

//this returns the html from 'message-right' 
$html = $nodes->item(0)->c14n() 
+0

我猜在第7行的标签应该是关闭一个元素是什么? –

+0

正确,只是改变了它。 – user3023421

回答

0

获取最后一个子元素(XPath的意志让这更容易)并删除它。

$delete = $finder->query("./*[last()]", $nodes->item(0))->item(0); 
$delete->parentNode->removeChild($delete); 

根据你真的需要你可能想获取(并随后删除)直接使用

//*[contains(@class, '$classname')]/*[last()]