J'ai un fichier XML qui contient des données d'arbre généalogique dans une structure imbriquée, et je veux l'analyser dans une liste imbriquée.Parse XML à une liste imbriquée avec PHP
J'ai le code suivant
<?php
$doc = new DOMDocument();
$doc->load('armstrong.xml');
echo $doc->saveXML();
?>
qui charge dans le fichier XML suivant et l'imprime en l'état
<?xml version="1.0" encoding="UTF-8"?>
<indi>
<id>id1</id>
<fn>Matt</fn>
<bday>1919</bday>
<dday>2000</dday>
<spouse>Evelyn Ross</spouse>
<family>
<indi>
<id>id2</id>
<fn>Jane</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
<indi>
<id>id3</id>
<fn>Jason</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
<indi>
<id>id4</id>
<fn>Samuel</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
<indi>
<id>id5</id>
<fn>John</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
<indi>
<id>id6</id>
<fn>John</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
</family>
</indi>
</family>
Cependant, je veux analyser dans le format suivant :
<ul>
<li>
<span class="vcard person" id="id1">
<span class="edit fn">Matt</span>
<span class="edit bday">1956</span>
<span class="edit dday"></span>
<span class="edit spouse">Eunace Fulton</span>
</span>
<ul> ... List of Family ... </ul>
</li>
</ul>
Je suis assez nouveau pour PHP, donc si c'est un problème incroyablement simple, je m'excuse! J'apprécierais vraiment des idées.
EDIT
Je suis maintenant en utilisant la boucle récursive suivante mais toujours des problèmes
$doc = new DOMDocument();
$doc->load('armstrong.xml');
function outputIndi($indi) {
$i = new DOMDocument();
$i = $indi;
echo '<li>';
echo '<span class="edit fn">' . $indi->getElementsByTagName("fn") . '</span>'; // name not a real attribute, must access through DOM
echo '<span class="edit bday">' . $indi->getElementsByTagName("bday") . '</span>'; // ditto
// ...
echo '<ul>';
foreach ($indi->getElementsByTagName("family") as $subIndi) { // again, family not a real attribute
outputIndi($subIndi);
}
echo '</ul>';
echo '</li>';
}
outputIndi($doc->documentRoot);
?>
Ouais je le pense, merci! Donc, est la valeur initiale que je passe à outputIndi() la variable $ doc que j'ai actuellement? Et quand vous dites nom, bday etc ne sont pas de vrais attributs, est-ce que cela signifie que votre code a besoin de moi pour faire quelque chose comme getElementsByTagName? –
Pas tout à fait ... '$ doc-> documentRoot'. Et oui, c'est exactement ça, 'getElementsByTagName'. – Jonah
Merci J'ai essayé et je reçois cette erreur Erreur fatale: Appel à une fonction membre getElementsByTagName() sur un non-objet dans /nfs/c05/h03/mnt/74985/domains/chris-armstrong.com/html/ gortin/index.php on line 115 –