2010-02-28 3 views
0

Я пытаюсь оценить узел xml, используя xpath, и я не уверен, почему он не оценивает true.Почему этот xpath не оценивается как true?

XML

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

Когда я отправить форму этот скрипт называется

<?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; 
} 
?> 

ответ

4

Вместо этого

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

Мне просто нужно, чтобы сделать это

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

Теперь он проверяет, существует ли хотя бы один узел <username> с значением узла "tom".

+0

Не будет ли проверять атрибут «имя пользователя»? –

+0

Нет. Я попробовал, он вернёт правильно. Я думаю, что [@ username = 'tom'] вернет атрибут. http://www.w3schools.com/xpath/xpath_syntax.asp – Catfish

+0

Ах, понял. Мой XPath немного ржавый. Если бы вы могли отредактировать свой ответ, я дам вам +1. :) –