php compter les éléments xml
Salut quelle est la meilleure façon de compter le nombre d'éléments dans un fichier XML? Dans mon cas, je veux compter le nombre de balises XML avec le nom "OfferName" dans la balise "OfferNameList".
Le code XML ci-dessous est contenue dans une variable php $offre
$offers = '<OfferNameList>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
<OfferName>...</OfferName>
...
</OfferNameList>';
Merci pour l'aide
OriginalL'auteur Martin | 2010-12-08
Vous devez vous connecter pour publier un commentaire.
Avec
DOM
vous pouvez soit utiliserà compter tous OfferName éléments seulement.
length
est un attribut deDOMNodeList
.À compter tous OfferName éléments à l'intérieur d'un OfferNameList, vous pouvez utiliser
DOMXPath::évaluer
Noter que dans est quelque peu imprécis ici que la requête XPath seulement considérer les enfants directs. S'il vous plaît ajuster vos question si vous avez besoin d'OfferName des éléments n'importe où en dessous d'un OfferNameList élément.
Également noter que
//
va interroger n'importe où dans le document, ce qui peut être moins efficace pour les documents de grande taille. Si vous connaissez OfferNameList éléments se produire à une certaine position dans votre XML uniquement, utilisez un chemin direct.De travail complète, exemple (exécuter sur codepad):
vous êtes les bienvenus. Fait!
Merci!!!! Bien répondu et très apprécié!
Je suis toujours à la recherche d'un question réponse que ma question est fermé et les jours dupliqué comme celui-ci. stackoverflow.com/questions/12234985/php-xml-count-numbers je veux calculer la "chaîne" de la matrice, mais juste de l'élément. pourriez-vous s'il vous plaît aider. merci
OriginalL'auteur Gordon
eighter vous utiliser simplexml: http://www.php.net/manual/de/simplexmlelement.count.php
ou de le faire avec DOM
OriginalL'auteur endo.anaconda
Vous pouvez utiliser la fonction PHP substr_count
Vous pourriez avoir besoin pour extraire le contenu des balises à l'aide d'une expression régulière en premier.
Si vous êtes l'auteur d'un fichier XML, vous pouvez aussi tout simplement intégrer le comte comme un attribut de la OfferNameList étiquette, telle que ....
Enfin, si vous avez besoin de parser le fichier XML, je suggère fortement pour obtenir un bon analyseur XML (DOM Parser compteront à l'intérieur des balises pour vous, en supposant que le XML n'est pas trop grand), mais vous serez également en mesure de le faire avec un analyseur SAX mise en œuvre.
OriginalL'auteur Vincent Mimoun-Prat
En ajoutant à la solution donnée par @Gordon (qui fonctionne parfaitement bien pour la question posée), il n'est pas mentionné, et pour les gens à qui il n'est pas très évident à:
Il est possible d'utiliser
evaluate
si vous voulez compterOfferName
à partir du XML comme:`
On peut utiliser
echo $xp->evaluate('count(//OfferNameList[1]/OfferName)');
à compter de PREMIÈRE OfferNameList et
echo $xp->evaluate('count(//OfferNameList[2]/OfferName)');
à compter de DEUXIÈME.P. S.:
Je suis en train de poster cette réponse ici parce que je voulais faire quelque chose comme ce que je viens et j'ai trouvé ce post sur google avec!
Seondly, nous utilisons 1 et 2 pour accéder à la PREMIÈRE et DEUXIÈME listes et PAS 0 et 1. Les débutants comme moi pourrait ne pas le savoir.
OriginalL'auteur Watchful Protector
Vous pouvez utiliser
$dom->count()
pour PHP 5 >= 5.3.0Manuel PHP
OriginalL'auteur heshanlk