Une idée possible serait de:
- Créer une nouvelle instance
$destination
de DOMDocument
- lsinitialisez avec un nœud
<statuses>
- Pour chacun de vos 3 chaînes XML:
- le charger à un autre instance de
DOMDocument
: $currentDocument
- trouver le nœud
<status>
, avec $currentDocument->getElementsByTagName
ou un équivalent
- import le nœud
<status>
vous avez trouvé le document $destination
, avec $destination->importNode
- Lorsque la boucle sur chaque chaîne XML est terminé, le document
$destination
devrait contenir ce que vous vouliez, et vous pouvez l'enregistrer, en utilisant $destination->saveXML
Et voici un exemple rapide de code qui pourrait vous aider à comprendre ce que je voulais dire:
D'abord, voici le tableau de chaînes XML - je leur ai fait beaucoup plus courte, mais l'idée est la même que ce que vous ont:
$strings = array(
'<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array"><status>
<id>ID 1</id>
</status></statuses>',
'<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array"><status>
<id>ID 2</id>
</status></statuses>',
'<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array"><status>
<id>ID 3</id>
</status></statuses>',
);
Créons le document de destination, et mettre un <statuses>
en elle:
$destination = new DOMDocument();
$destination->formatOutput = true;
$destinationStatuses = $destination->createElement('statuses');
$destination->appendChild($destinationStatuses);
Maintenant, on boucle sur les 3 chaînes XML:
foreach ($strings as $str) {
$current = new DOMDocument();
$current->loadXML($str);
$currentStatuses = $current->getElementsByTagName('status');
foreach ($currentStatuses as $currentStatus) {
$destinationStatus = $destination->importNode($currentStatus, true);
$destinationStatuses->appendChild($destinationStatus);
}
}
Pour chaque chaîne, nous:
- charge à une nouvelle
DOMDocument
- Recherchez la balise
<status>
(s)
- Pour chaque balise
<status>
, importez-la dans le document de destination
- Et ajoutez-la à son
<statuses>
tag
Et, enfin, si nous affichons le contenu du nouveau document:
echo '<pre>' . htmlspecialchars($destination->saveXML()) . '</pre>';
Nous obtenons:
<?xml version="1.0"?>
<statuses>
<status>
<id>ID 1</id>
</status>
<status>
<id>ID 2</id>
</status>
<status>
<id>ID 3</id>
</status>
</statuses>
savoirnos trois <status>
des trois chaînes originales ont été fusionnés en un seul document XML ;-)
méthode I get string (109960) " xml version =" 1.0 "encoding =" UTF-8 "?> sur la première ligne de $ xml – CLiown
@danit l'avez-vous résolu à partir de l'autre question ou est-ce toujours un problème? – Gordon