2009-10-01 12 views
1

J'ai un fichier xml dans lequel je veux stocker l'attribut rank d'un nœud dans une variable.Comment obtenir uniquement les éléments xpath requis?

J'ai essayé:

echo $var = $xmlobj->xpath("//Listing[@rank]"); 

en vain, il imprime juste ArrayArray.

Comment cela peut-il être fait?

if($xmlobj = simplexml_load_string(file_get_contents($xml_feed))) 
     { 
      foreach($xmlobj as $listing) 
      { 

        // echo 'Session ID: ' . $sessionId = $listing->sessionId . '<br />'; 
        // echo 'Result Set: ' . $ResultSet = $listing->ResultSet . '<br />'; 

        print_r($xmlobj->xpath("//Listing[@rank]")); 

        // $result = $xmlobj->xpath("/page/"); 
        // print_r($result); 

      } 
     } 

suggestion Henrik:

foreach($xmlobj as $listing) 
{ 
     $var = $xmlobj->xpath("//Listing[@rank]"); 

     foreach ($var as $xmlElement) 
     { 
      echo (string)$xmlElement; 
     } 
} 

Ici, vous allez

<page> 
    <ResultSet id="adListings" numResults="3"> 
     <Listing rank="1" title="Reliable Local Moving Company" description="TEST." siteHost="www.example.com"> 
     </Listing> 

Répondre

2

Modifier après avoir joué avec le posté exemple xml:

  • Ma réponse initiale était un peu hors piste - lancer à la chaîne vous donnerait le texte intérieur des éléments sélectionnés, si elles ont un (pas le cas ici)
  • "//Listing[@rank]" sélectionne des éléments tous « Liste » qui ont un attribut « rang ». Si vous voulez sélectionner les attributs eux-mêmes, utilisez "//Listing/@rank"
  • Pour émettre un attribut, utilisez la SimpleXMLElement avec la syntaxe de tableau: $xmlElement['rank']

Donc dans votre cas:

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing/@rank"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
    } 
} 

ou

foreach($xmlobj as $listing) 
{ 
    $var = $xmlobj->xpath("//Listing[@rank]"); 
    foreach ($var as $xmlElement) 
    { 
     echo $xmlElement['rank']; 
     echo $xmlElement['title']; // Added to demonstrate difference 
    } 
} 

devrait fonctionner. Dans le premier cas, $ xmlElement ne contiendrait que l'attribut 'rank' alors que dans le second, il contiendrait l'élément 'Listing' complet (permettant ainsi la sortie du titre).

+0

Merci pour la réponse Henrik. Malheureusement, cela ne fonctionne pas, Ma mise en œuvre de votre code est ci-dessus? –

+0

Hmm, étrange - qu'est-ce qu'il imprime? –

+0

Juste un écran vide et pas d'erreurs –

Questions connexes