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?
how to delete string between some xml nodes?
Moderator: General Moderators
- feyd
- Neighborhood Spidermoddy
- Posts: 31559
- Joined: Mon Mar 29, 2004 3:24 pm
- Location: Bothell, Washington, USA
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.
preg_replace() uses regular expressions. There have been many threads on finding the data between two known points. Take a look in Regex.
- Ollie Saunders
- DevNet Master
- Posts: 3179
- Joined: Tue May 24, 2005 6:01 pm
- Location: UK
Using an XML dom you can do this:
Tested.
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>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
?>- Ollie Saunders
- DevNet Master
- Posts: 3179
- Joined: Tue May 24, 2005 6:01 pm
- Location: UK