8
votes

Obtenir la partie de texte d'un nœud à l'aide de PHP Simple XML

Compte tenu du code PHP:

Title


0 commentaires

7 Réponses :


1
votes

Vous pouvez obtenir le noeud de texte d'un élément DOM avec SimplexML juste en le traitant comme une chaîne: xxx pré>

Cependant, cela imprime: P>

This is a link

with some text following it.
TitleTitle


4 commentaires

Cela aide toujours à savoir que ce que vous essayez d'accomplir n'est tout simplement pas possible. Malheureusement, je ne possède pas le XML, alors c'est ce que c'est. Savez-vous que si l'un des autres analyseurs de PHP conviennent mieux à ma tâche?


Je ne connais pas d'aucun existant .. Peut-être que vous pourriez en écrire un!


Après avoir aboyé le mauvais (analysserie?) Arbre depuis un certain temps, il semble que Dom est notre ami dans le besoin quand il s'agit de faire face à ce type de XML.


Si vous êtes prêt à écrire plus de code, j'ai trouvé l'analyseur XMLreader Pull Pull Capable de gérer une soupe à balise. Cependant, il n'y aura pas de xpath disponible afin que vous ayez à transporter vous-même des informations de contexte comme vous analysez la soupe.



0
votes

Comme @Tandu dit, ce n'est pas possible, mais si vous pouvez modifier votre XML, cela fonctionnera:

$xml = <<<EOF
<articles>
    <article>
        This is a link
    </article>
    <link>Title</link>
    <article>
       with some text following it.
    </article>
</articles>


0 commentaires

17
votes

Il peut y avoir des moyens d'atteindre ce que vous voulez utiliser uniquement SimplexML, mais dans ce cas, le moyen le plus simple de le faire est d'utiliser dom . La bonne nouvelle est que si vous utilisez déjà SimplexML, vous n'avez pas à modifier quoi que ce soit que DOM et SimplexML sont essentiellement interchangeable : xxx

supposant que votre tâche consiste à itérer sur chaque

et obtenez-en Contenu, votre code ressemblera à xxx

2 commentaires

Cela produit réellement le résultat exact dont je m'attendais - sans résoudre le problème sous-jacent de traverser le document XML.


Vous ne pourrez pas «traverser» ou itérer les nœuds de texte avec SimplexML. Ou du moins, il sera inutilisé / peu pratique si possible. Utilisez simplexml, partout où il facilitera plus de choses, puis importer des nœuds sélectionnés sur DOM pour accéder aux fonctionnalités qui ne font pas partie de SimplexML.



3
votes

Donc, la réponse simple à ma question était la suivante: SimplexML ne peut pas traiter ce genre de XML. Utilisez DOMDocument à la place.

Cet exemple montre comment traverser l'ensemble du XML. Il semble que Domdocument fonctionne avec n'importe quel XML alors que SimplexML nécessite que le XML soit simple. xxx

Vous pouvez également charger le XML à l'aide de simppexml, puis le convertir en DOM à l'aide de DOM_IMPORT_SIMPLEXML ( ) comme Josh a dit. Cela serait utile, si vous utilisez SimplexML pour filtrer des nœuds pour analyse, par exemple. Utilisation de xpath.

Cependant, je n'utilise pas réellement simplexml, donc pour moi qui prendrait le long chemin autour. xxx

merci pour toute l'aide!


0 commentaires

5
votes
node->asXML();// It's the simple solution i think !!

1 commentaires

Avez-vous essayé cela avec les données de l'OP? Est-ce que cela fonctionne réellement?



1
votes

Cela a déjà été répondu, mais je pose à la chaîne (c'est-à-dire Sstring = (string) osimplexmlnode-> tagname) a toujours travaillé pour moi.


1 commentaires

echo (string) $ xmlnode;



1
votes

Essayez ceci:

$parser = simplexml_load_string($xml);
echo dom_import_simplexml($parser)->textContent;


0 commentaires