Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment concaténer des balises similaires dans un fichier XML

Cela peut être fait avec xpath. Voici un exemple avec Simplexml :

Vous pouvez d'abord trouver toutes les premières feuilles :

foreach ($xml->xpath('//*[not(*) and not(preceding-sibling::*)]') as $firstLeaf) {
    ...
}

puis vous concaténerez le texte avec toutes les feuilles suivantes :

    $followingWithSameName = 'following-sibling::*[name(.) = name(preceding-sibling::*[last()])]';
    // change the text of the first leaf
    $firstLeaf[0] = implode(', ', $firstLeaf->xpath(".|$followingWithSameName"));

puis vous supprimez toutes les feuilles suivantes :

    // remove all following leafs with the same name
    foreach ($firstLeaf->xpath($followingWithSameName) as $leaf) {
        unset($leaf[0]);
    }

Démo