CruellaDeVille Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Jeg står helt fast og det er like før jeg river av mine lange, lyse lokker her. I min add_user-modul skal jeg sjekke om et brukernavn er registrert fra før. Er det skal en feilmelding skrives ut, hvis ikke registreres brukeren. Problemet er at jeg ikke finner ut hva hvordan jeg skal finne størrelsen på nodelisten som spørringen returnerer. Jeg har forsøkt med count, men uansett hva jeg skriver får jeg 1 - aldri noe annet. Eksemplene er med en annen fil, article.xml, ikke brukerfilen min, så det er ikke derfor jeg får feil svar. $query = 'count(//article[title= "Enda en artikkel"])'; $entries = $xpath->query($query); var_dump($entries); // skriver ut object(DOMNodeList)#3 (0) { } $query = '//article[title= "Enda en artikkel"]'; $entries = $xpath->query($query); var_dump(count($entries)); // skriver alltid ut 1 what to do? Edit - jeg har også forsøkt denne varianten: $xpath_expr = "//user/username[.='$username']"; print($xpath_expr); var_dump($this->xpath->query($xpath_expr)->length); // skriver alltid ut int(0), selv om sha015 finnes :( Endret 22. oktober 2007 av CruellaDeVille Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 (endret) Må nesten få se xml-filen du tester med også da. Husk at attributer i xsl aksesseres med @. F.eks. article[@title = "abc"] Endret 22. oktober 2007 av Nazgul Lenke til kommentar
CruellaDeVille Skrevet 22. oktober 2007 Forfatter Del Skrevet 22. oktober 2007 Strukturen på xml-filen er slik. <users> <user userlevel="1" user_id="1"> <username>sivh</username> <password>skiftet_passord</password> <firstname>elling</firstname> <lastname>elling</lastname> <email>elli</email> </user> <user userlevel="1" user_id="2"> .... </user> </users> Jeg har løst det på en dum_dum måte, med å sammenligne nodeValue med $brukernavn, men jeg har lyst å lære xpath så derfor baler jeg litt til. Funksjonen for å sammenligne brukernavn -alle mine forsøk er i kommentar:( public function user_exists($username){ $root = $this->dom->load_document_and_root(USERFILE, 'users'); //$xpath_expr = "/users/user[username='".$username."']"; //$xpath_expr = "//user/username[.='$username']"; //print($xpath_expr); //var_dump($this->xpath->query($xpath_expr)->length); //die(); //return $this->xpath->query($xpath_expr) !=0; // den er alltid 1 $nodelist = $this->dom->getElementsByTagName('user'); foreach($nodelist as $node){ if(strcmp($node->getElementsByTagName('username')->item(0)->nodeValue, $username) ==0){ return true; } } return false; } Hvor har jeg tankefeil? Lenke til kommentar
Peter Skrevet 22. oktober 2007 Del Skrevet 22. oktober 2007 xml og xsl er litt dårlig dokumentert i PHP etter min mening, men på denne siden her: http://us2.php.net/manual/en/ref.dom.php er det en del spennende. Viktig å lese "properties"-tabellene, dvs. tabellene som tilsier hvilke attributer en klasse har. Noen eksempler på bruk: $doc = new DOMDocument(); $doc->load( 'text.xml' ); $xpath = new DOMXpath( $doc ); $nodes = $xpath->query( '/users/user' ); // antall noder i DOMNodeList print_r( $nodes->length ); //spesifikk node $node = $xpath->query( '/users/user[username ="sivh"]' )->item(0); // antall attributer print_r( $node->attributes->length ); // har barn var_dump( $node->hasChildNodes() ); // barna foreach( $node->childNodes as $subnodes ) { print_r($subnodes ); } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå