tipat10
Messages postés9Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention 8 mars 2007
-
30 nov. 2006 à 02:39
tipat10
Messages postés9Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention 8 mars 2007
-
1 déc. 2006 à 00:19
Bonjour,
Je souhaite "personnalier" les fonctions de DOMDocument.
J'ai donc créer ma propre classe :
class xml extends DOMDocument
{
//pour une requète xpath
public function xpq($query, $all=false)
{
$xpath = new DOMXPath($this);
$result = $xpath->query($query, $this);
if ($all) return $result;
else return $result->item(0);
}
// attribut (nom plus court)
public function attr($name)
{
return $this->getAttribute($name);
}
}
Appel de la classe:
$xml = new xml();
$xml->load($file);
$node = $xml->xpq("//site/page[@nom='1']");
echo $node->attr("nom");
J'obtiens l'erreur suivante :
Fatal error: Call to undefined method DOMElement::attr()
Je crois quie le problème c'est que $node est de type DOMElement et donc qu'il ne peut pas accéder à attr().
Je ne sais vraiment pas quoi faire pour résoudre ce problème. C'est la première fois que je m'aventure à faire une class. Pouvez-vous m'aider SVP ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 30 nov. 2006 à 09:32
Hello,
$node = $xml->xpq("//site/page[@nom='1']");
appelle cette méthode de ta classe xml :
public function xpq($query, $all=false)
{
$xpath = new DOMXPath($this);
$result = $xpath->query($query, $this);
if ($all) return $result;
else return $result->item(0);
}
qui retourne un DOMElement, et pas une instance de ta classe.
echo $node->attr("nom");
Appelle la méthode attr() de la classe DOMElement.
Et effectivement, cette méthode n'existe pas.
Tu ne parviendras pas à tes fins aussi facilement...
Si tu veux faire ce que tu essayes de faire, tu vas devoir surcharger plkusieurs classes, en plus de DOMDocument. Ici, tu devras déjà étendre DOMXpath, et surcharger sa méthode query, pour qu'elle renvoie une classe personnalisée, à toi, qui étendra DOMElement, et surcharger la méthode DOMElement::getAttribute ().
La POO est plus compliquée que ce que tu le penses ;-)
tipat10
Messages postés9Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention 8 mars 20071 1 déc. 2006 à 00:19
Bonjour,
Merci pour ta réponse
Si je comprend bien, il faudrait que je refasse toute les classes DOM* avec mes propre fonction. C'est bien ça ?
si oui, comment obtenir les source php pour les modifier ?