所以我想从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']);
答案 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]);
}