2011-06-09 7 views
1

Je n'ai généralement pas besoin de faire quoi que ce soit, mais pour ce projet, je dois analyser XML en PHP, donc c'est tout nouveau et très compliqué pour moi. Je dois afficher la quatrième balise sur une page et je pensais que j'utiliser getElementsByTagName, mais le problème est les trois balises précédentes sont les mêmes, il ressemble à quelque chose comme ceci:Analyser XML avec PHP

<Person fname="John" lname="Smith"/> 
<Person fname="Frank" lname="Jones"/> 
<Person fname="Mike" lname="Jackson"/> 
<Person fname="Jack" lname="Williams"/> 
<value no="50"/> 
<value no="60"/> 
<value no="70"/> 

Voici ce que je voudrais sortie dans ma page HTML en utilisant le premier attribut dans la quatrième balise et l'attribut dans la deuxième balise:

Mike: 60 

au fond, est-il possible que je peux demander la valeur de l'attribut dans la quatrième étiquette, indépendamment de ce que le tag est ou ce qui vient avant ou après?

Toute aide serait appréciée - merci! Éditer - Je n'ai pas écrit le XML, je demande à partir d'un serveur distant.

+0

Comment savez-vous que vous devez récupérer l'attribut fname de l'élément Person troisième et l'associer à l'attribut no de l'élément value second? – Gordon

+0

C'est juste une donnée ... c'est toujours cette personne, c'est toujours cette valeur. Donc je pense que ce que je cherche vraiment est quelque chose de similaire à getElementById sauf qu'au lieu de l'id, il doit récupérer la quatrième balise Person et la deuxième balise Value, la structure du document ne change jamais, les seules choses susceptibles de changer sont les valeurs dans les attributs ... des idées? – Jane

Répondre

2

Mes notes sur XML:

Liens: http://php.net/simplexml.examples-basic

Et par exemple:

$xml='<p4wappremium> 
    <servermessage> 
     <providerref sid="123"/> 
     <useractioninfo 
      msisdn="48790300200" 
      tid="12123123" 
      stid="123123" 
      pid="345345" 
      bid="1" 
      /> 
    </servermessage> 
</p4wappremium>'; 

$xml = simplexml_load_string($xml); 

foreach ($xml->providerref[0]->attributes() as $name -> $value) { 
    ${$name}=$value; 
} 

foreach ($xml->useractioninfo[0]->attributes() as $name -> $value) { 
    ${$name}=$value; 
} 

espère que ce sera utile pour votre cas.

2

Eh bien, je vous suggère de réorganiser votre «schéma». Parce que cela me semble assez étrange d'associer des valeurs de balises par ordre, comme vous le faites.

pourquoi ne pas

<Person fname="Mike" lname="Jackson" value="60"/> 

ou

<Person fname="Mike" lname="Jackson"> 
<value no="60"/> 
</Person> 

à la place?

En fait, la façon dont vous appliquez ces balises ne semble pas être utile ou peut-être même pas valide XML. B/c ce que vous essayez d'analyser n'est pas un xml-dom-tree mais une simple liste. Alors pourquoi ne pas écrire un analyseur de liste?

Et si vous voulez utiliser l'extension DOM et getElementsByTagName(), alors selon le manual vous obtiendrez un objet DOMNodeList qui vous permet de vous référer aux nœuds résultants par un index !?

+0

Je n'écris pas le XML donc je ne peux pas le réorganiser, je le saisis depuis un serveur distant ... – Jane

+0

Je dois aussi ajouter que la valeur n'est pas forcément spécifique à cette personne, elle doit juste être concaténée dans le but de cet exercice ... – Jane