2010-02-28 2 views
0

J'essaie d'évaluer un nœud xml en utilisant xpath et je ne suis pas sûr pourquoi il n'évalue pas vrai.Pourquoi ce xpath n'évalue-t-il pas à true?

xml

<?xml version="1.0"?> 
<users> 
    <user> 
     <username>tom</username> 
     <password>d644cd4b1c72f563855e689d46d9198e</password> 
    </user> 
    <user> 
     <username>jeff</username> 
     <password>smith</password> 
    </user> 
</users> 

Quand je soumets une forme ce script est appelé

<?php 
     //needed for firePHP in firebug 
     include('FirePHPCore/fb.php'); 
     ob_start(); 

     $error = false; 
     if(isset($_POST['login'])) { 
      $username = preg_replace('/[^A-Za-z0-9]/', '', $_POST['username']); 
      $password = md5($_POST['password']); 


      if(file_exists("../users.xml")) { 

       $xmlobject = simplexml_load_file("../users.xml"); 
       fb("username is: ".$username); //returns tom 
       fb($xmlobject->xpath("//*[username='tom']")); //returns the entire array of elements. How do i make it return just the node value? 

       //why does this evaluate to false? 
       if($username == $xmlobject->xpath("//*[username='tom']")) { 
        fb("got here"); 
       } else { 
        fb("got here instead"); 
       } 
      } 
      $error = true; 
} 
?> 

Répondre

4

Au lieu de cela

if($username == $xmlobject->xpath("//*[username='tom']")) 

Je devais juste faire

if($xmlobject->xpath("//*[username='tom']")) 

Maintenant, il vérifie si au moins un nœud <username> existe avec la valeur de nœud "tom".

+0

Cela ne vérifierait-il pas un attribut "nom d'utilisateur"? –

+0

Non. J'ai essayé, ça revient correct. Je pense que [@ username = 'tom'] retournerait un attribut. http://www.w3schools.com/xpath/xpath_syntax.asp – Catfish

+0

Ah, j'ai compris. Mon XPath est un peu rouillé. Si vous pouviez éditer votre réponse, je vous donnerai +1. :) –

Questions connexes