6
votes

Split XML en PHP

J'ai une xml fusionnée avec un élément racine et plusieurs éléments d'enfant. Quelque chose comme ça xxx pré>

Ce que je veux, c'est un moyen facile d'analyser XML et de créer une matrice de chaînes XML des éléments. P>

$arrXml[0] = '<item>test1</item>';
$arrXml[1] = '<item>test2</item>';


8 commentaires

Je ne comprends pas comment cela est pertinent? J'ai une tâche particulière avec cette solution particulière. Je ne peux pas que la grosse image puisse être changée. Je crois que j'étais assez clair dans les exigences.


@user cela sonne simplement comme une idée vraiment stupide.


Je ne peux pas me croire que vous votez voter pour ne pas partager une image plus grande, même si vous avez une expérience de développement. Ce que je demande est clair et je n'ai pas besoin d'une leçon morale. En outre, si vous avez vraiment besoin de savoir une 3ème partie, vous envoyez un gros fichier XML. J'ai besoin d'analyser le fichier et d'envoyer chaque client la pièce dont elle a besoin aussi en tant que XML.


Les éléments vont-ils commencer et se terminer sur la même ligne? De plus, de votre image plus grande, je dirais que cette approche est mieux résolue avec XSLT ou au moins sans convertir à un tableau. Je veux dire, si vous avez besoin d'envoyer XML en arrière, pourquoi Tranform vers un tableau? Choisissez simplement les pièces dont vous avez besoin et envoyez-les. BTW, bon pekka a demandé.


@User la raison pour laquelle vous demandez que la plus grande image est que l'utilisation d'une analyse de chaîne pour cela est compliquée à mettre en œuvre et susceptible d'inviter une chiite de problèmes, par ex. avec des structures imbriquées. Avez-vous envisagé d'utiliser des fonctions XML natif pour l'ensemble du processus?


duplicaté possible de PHP Quelle est la meilleure approche pour utiliser XML? Besoin de créer et d'analyser les réponses XML


J'ai édité la question pour pouvoir supprimer mon bowvote. Je pense toujours qu'il est imprudent de faire avec des tableaux.


J'ai besoin de scinder XML aussi. Trasforming XMLS est une tâche commune dans les plates-formes d'intégration du système, comme ESB. Danip a posé une bonne question.


3 Réponses :


1
votes

Avez-vous regardé simppleXML ?

Par exemple: xxx


3 commentaires

Cela ne lui donnera pas ce qu'il demande. Cela dit, je ne suis pas sûr de savoir si ce qu'il demande est une bonne idée


@Pekka - Oui, je sais mais il veut une solution élégante pour analyser XML et SimplexML est juste que (IMO). Trop de marge pour l'erreur sinon


Ce sont les premières étapes, je suis d'accord..mais le reste?




7
votes

OK, comme déjà mentionné dans les commentaires à votre question Je ne suis pas convaincu que c'est vraiment ce que vous devriez faire , mais puisque je ne peux pas supporter Simplexml et ne veux pas que les gens pensent que c'est le seul moyen , voici comment le faire

avec DOM : xxx


avec < Code> xmlreader : xxx


et xmlparser * : xxx

* Vous pouvez également être effectué via des rappels déclenchés lorsqu'un élément d'élément est rencontré. Prendrait plus de code, mais est assez flexible.

Notez que tout ce qui précède pourrait avoir besoin de quelque peau de peau en fonction de votre vrai XML.


étant donné que le XML de votre question (qui est probablement qu'un exemple) est de la saleté simple et bien définie, vous pouvez également utiliser exploser () : xxx < / pré>

ou une regex (lecture de non-délégation ci-dessous) xxx

Disclaimer maintenant, juste pour vous assurer que vous ne commencez pas à analyser XML Avec regex ou exploser régulièrement: les deux dernières approches ne sont réalisables que si votre balisage est vraiment aussi clairement défini comme vous l'indiquez.


1 commentaires

Vous n'avez pas mentionné simplexmlelement, il peut à XPath Recherches. Mais selon mon expérience, la méthode asoxml () ne gère pas bien les espaces de noms.