如何从XML树中删除元素,其中属性是Simple XML PHP中的特定字符串

时间:2011-09-06 22:56:06

标签: php xml simplexml

所以我想从XML字符串中删除子属性,其中属性是特定值。

例如:

<xml>
  <note url="http://google.com">
   Values
  </note>
  <note url="http://yahoo.com">
   Yahoo Values
  </note>
</xml>

那么我如何删除带有属性http://yahoo.com的音符节点作为URL的字符串?

我正在尝试在PHP Simple XML中执行此操作

哦,我也将它作为XML对象加载,使用SimpleXML_Load_String函数,如下所示:

$notesXML = simplexml_load_string($noteString['Notes']);

2 个答案:

答案 0 :(得分:2)

SimpleXML没有删除子节点功能,
有些情况下你可以做How to deleted an element inside XML string?
但取决于XML结构

DOMDocument中的解决方案

$doc = new DOMDocument;
$doc->loadXML($noteString['Notes']);

$xpath = new DOMXPath($doc);
$items = $xpath->query( 'note[@url!="http://yahoo.com"]');

for ($i = 0; $i < $items->length; $i++)
{
  $doc->documentElement->removeChild( $items->item($i) );
}

答案 1 :(得分:1)

可以使用unset()删除使用SimpleXML的节点,尽管它有一些技巧。

$yahooNotes = $notesXML->xpath('note[@url="http://yahoo.com"]');
// We know there is only one so access it directly
$noteToRemove = $yahooNotes[0];
// Unset the node. Note: unset($noteToRemove) would only unset the variable
unset($noteToRemove[0]);

如果您希望删除多个匹配节点,则可以循环它们。

foreach ($yahooNotes as $noteToRemove) {
    unset($noteToRemove[0]);
}