PHP XMLReader arriver nœud parent?
Lors de l'analyse d'un Fichier XML à l'aide de la XMLReader Méthode, comment puis-je obtenir le nœud parent d'un élément ?
$xml = new XMLReader();
$xml->XML($xmlString);
while($xml->read())
{
$xml->localName; //gives tag name
$xml->value; //gives tag value
//how do I access the parent of this element
}
Vous devez vous connecter pour publier un commentaire.
Version courte: Vous n'en avez pas, du moins pas directement. C'est au programmeur de code contexte dans leur algorithme d'analyse avec XMLReader.
Version longue: PHP XMLReader est ce qu'on appelle un pull analyseur. Tirez sur les analyseurs diffèrent d'un arbre/dom analyseur en ce qu'ils peuvent traiter avec les flux de texte. En d'autres termes, ils peuvent commencer l'analyse du document avant d'avoir l'ensemble du document. Ce qui diffère de l'un à base de bois/DOM parser comme SimpleXML ou DOMDocument qui doit charger l'intégralité du document en mémoire avant de pouvoir faire quoi que ce soit.
L'avantage est que si vous avez un 75 MO fichier XML que vous n'avez pas besoin de 75 MO de RAM libre de traiter avec elle (comme vous le feriez avec un arbre en fonction de l'analyseur). Le compromis est de tirer des analyseurs de ne jamais avoir le contexte de l'ensemble du document. Le seul à avoir le contexte de ce nœud qu'ils se trouvent traitement pour le moment.
Une autre façon de penser, c'est un arbre/dom analyseur de a à savoir sur chaque partie de la pièce parce qu'elle ne sait pas ce que vous allez lui demander. Vous et le retrait de l'analyseur, cependant, ont fait un arrangement différent. Il va les garder de jeter les nœuds à vous et vous laisse avec leur contenu.
Voici un exemple de code qui est (je l'espère) proche de ce que vous êtes après.
file_get_contents
fonction sur 75 MO fichier de grande taille. En fait en utilisant DOMDocument vous aurez besoin de beaucoup plus de 75 MO$xml->open('example.xml');
à la place!J'ai commencé à utiliser le expand() fonction de la XMLReader. Il donne un DOM représentation de la balise xml courante. J'ai utilisé expand() sur le nœud parent, il m'a donné l'élément du DOM de la balise parent, puis à l'aide de l'habitude DOMDocument() de l'analyse extraite à l'enfant des valeurs.
À l'aide de la fonction de développement se charge seulement de cette partie de XML en mémoire plutôt que de se charger de l'ensemble de XML en mémoire.
Je pense que vous voulez: XMLReader::moveToElement