Page 1 of 1
how to delete string between some xml nodes?
Posted: Sun Aug 27, 2006 11:44 am
by aigarzzz
i have a xml string in php varible:
$string="...<somenode>val1</somenode><mustdelete>val2</mustdelete>...<somenode>val3</somenode><mustdelete>val4</mustdelete>";
how can i delete with php all content between each <mustdelete> node?
Posted: Sun Aug 27, 2006 11:50 am
by feyd
Quick answer: 2 ×
strpos() +
substr_replace() or
preg_replace().
preg_replace() uses regular expressions. There have been many threads on finding the data between two known points. Take a look in
Regex.
Posted: Sun Aug 27, 2006 12:22 pm
by Ollie Saunders
Using an XML dom you can do this:
Code: Select all
$input = '<atag><mustdelete>stuff</mustdelete><b>stuff</b></atag>';
$dom = new DOMDocument();
$dom->loadXML($input);
$mustdeletes = $dom->getElementsByTagName('mustdelete');
foreach ($mustdeletes as $item) {
$item->parentNode->removeChild($item);
}
echo htmlspecialchars($dom->saveXML(), ENT_QUOTES);
Code: Select all
<?xml version="1.0"?> <atag><b>stuff</b></atag>
Tested.
Posted: Sun Aug 27, 2006 12:41 pm
by volka
but try
Code: Select all
$input = '<atag><mustdelete>stuffA</mustdelete><mustdelete>stuffB</mustdelete><b>stuff</b></atag>';
Code: Select all
<?php
$input = '<atag><mustdelete>stuffA</mustdelete><mustdelete>stuffB</mustdelete><b>stuff</b></atag>';
$dom = new DOMDocument();
$dom->loadXML($input);
$mustdeletes = $dom->getElementsByTagName('mustdelete');
while( 0 < $mustdeletes->length ) {
$item = $mustdeletes->item(0);
$item->parentNode->removeChild($item);
}
echo $dom->saveXML(); // testing with php cli
?>
Posted: Sun Aug 27, 2006 2:52 pm
by Ollie Saunders
Cool, I learnt something today. Thanks Volka.