0

<br />以下のコードでノードから削除するためにxpathを使用しています。

$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>

ただし、は後のテキストであるため、削除<br />したくありません。<p>Text<strong>Bold<br /></strong>Break</p><br />

どうすればこれを修正できますか?

4

1 に答える 1

1

<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();

出力(デモ):

<?xml version="1.0"?>
<root>
   <p>Text<strong><br remove="remove"/></strong></p>
   <p>Text<strong>Bold<br/></strong></p>
</root>
于 2012-10-24T14:22:17.733 に答える