PHP Xpath删除
?
问题描述:
我使用XPath从节点与下面这段代码删除<br />
,PHP Xpath删除<br />?
$nodeList = $xpath->query("//p[node()[1][self::br]]/br[1] | //p[node()[last()][self::br]]/br[last()] | //*[node()[last()][self::br]]/br[last()]");
foreach($nodeList as $node)
{
$node->parentNode->removeChild($node);
}
所以它消除<p>Text<strong><br /></strong></p>
到<p>Text</p>
这是完美的。
但我不希望它从<p>Text<strong>Bold<br /></strong>Break</p>
删除<br />
,因为<br />
之后的文字。
我该如何解决这个问题?
答
如果<br>
的父元素节点的节点值是空字符串,则需要将其删除。这可能符合您的需求更好地:
//br[string(..) = '']
的代码示例显示了一个符合这些(增加了删除属性):
<?php
$xml = simplexml_load_string('
<root>
<p>Text<strong><br /></strong></p>
<p>Text<strong>Bold<br /></strong></p>
</root>
');
foreach($xml->xpath('//br[string(..) = ""]') as $br) {
$br['remove'] = 'remove';
}
echo $xml->asXML();
输出(Demo):
<?xml version="1.0"?>
<root>
<p>Text<strong><br remove="remove"/></strong></p>
<p>Text<strong>Bold<br/></strong></p>
</root>
+0
谢谢你hakre!这就是我所追求的!谢谢! – laukok
你的意思是'
'无处不在,你说''? – Quentin
对不起,我的错误。修正了...... – laukok
谢谢哈克。我怎么能确定一个父节点是空的? – laukok