यह xpath के साथ किया जा सकता है। यहाँ Simplexml . के साथ एक उदाहरण दिया गया है :
आप सबसे पहले सभी पहले पत्ते पा सकते हैं:
foreach ($xml->xpath('//*[not(*) and not(preceding-sibling::*)]') as $firstLeaf) {
...
}
और फिर आप पाठ को निम्नलिखित सभी पत्तों के साथ संयोजित करते हैं:
$followingWithSameName = 'following-sibling::*[name(.) = name(preceding-sibling::*[last()])]';
// change the text of the first leaf
$firstLeaf[0] = implode(', ', $firstLeaf->xpath(".|$followingWithSameName"));
और फिर आप निम्नलिखित सभी पत्ते हटा दें:
// remove all following leafs with the same name
foreach ($firstLeaf->xpath($followingWithSameName) as $leaf) {
unset($leaf[0]);
}