probleme d'attribut

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme d'attribut

par jeff » 10 déc. 2005, 12:38

solution
	public function goToElement($requete)
	{
		$xmlpath=simplexml_import_dom($this->xml);
		$this->result=$xmlpath->xpath($requete);
		return $this;
	}

	public function newNode($name,$value=null)
	{
		try{
			if(count($this->result)==1)
			$dom=dom_import_simplexml($this->result[0]);
			else
			throw new Exception('$this->result est different de 1');
			$new=$this->xml->createElement($name,$value);
			$dom->appendChild($new);
		}
		catch (Exception $e){
			echo $e->getMessage().'<br/>';
			echo $e->getCode().'<br/>';
			echo $e->getTrace().'<br/>';
			echo $e->getLine().'<br/>';
	
il fallait en fait fait import de dom vers simpleXml

par jeff » 10 déc. 2005, 12:14

le code l'erreur est 4=>

Code : Tout sélectionner

Si un noeud est utilisé dans un document autre que celui qui l'a créé.
:-k
ouai comment je peut faire car je n'en ai aucune idée

voici la classe
public function __construct($file)
	{
		//parent::__construct();
		$this->file=$file;
		$this->xml=new DOMDocument();
		$this->xml->load($this->file);
	}

public function goToElement($requete)
	{
		$xmlpath=simplexml_load_file($this->file);
		$this->result=$xmlpath->xpath($requete);
		return $this;
	}

	public function newNode($name,$value=null)
	{
		try{
			if(count($this->result)==1)
			$dom=dom_import_simplexml($this->result[0]);
			else
			throw new Exception('$this->result est different de 1');
			$new=$this->xml->createElement($name,$value);
			/*echo var_dump($new).'<br/>';
			echo $new->nodeName.'---'.$new->nodeValue.'<br/>';
			echo var_dump($dom).'<br/>';
			echo $dom->nodeName.'-----'.$dom->nodeValue;*/
			$dom->appendChild($new);
		}
		catch (Exception $e){
			echo $e->getMessage().'<br/>';
			echo $e->getCode().'<br/>';
			echo $e->getTrace().'<br/>';
			echo $e->getLine().'<br/>';
		}
	}

par jeff » 09 déc. 2005, 18:26

par ex:je veux ajouter un fils a table

Code : Tout sélectionner

<?xml version="1.0"?> <base> <table name="moteur"> <field>puissance</field> <field>frequence</field> <field>couple</field> </table>
le but est de se placer sur le noeud voulue (avec xpath)et d'ajoute, cloner , modifier ect..
voici mon code
	public function newNode($name,$value=null)
	{
		echo 'class'.__CLASS__.' methode '.__METHOD__.'<br/>';
		echo count($this->result).'<br/>';
		try{
			if(count($this->result)==1)
			$dom=dom_import_simplexml($this->result[0]);
			else
			throw new Exception('$this->result est different de 1');
			echo $dom->nodeName;
			$new=$dom->createElement($name,$value);
			$dom->appendChild($new);
		}
		catch (Exception $e){
			echo $e->getMessage().'<br/>';
			echo $e->getCode().'<br/>';
			echo $e->getTrace().'<br/>';
		}
	}
rectification c'est appenchild qui n efonctionne pas et l'erreur est

Code : Tout sélectionner

Wrong Document Error 4 Array

par jeff » 09 déc. 2005, 18:14

merci je n'y avais pas penser
mais je rencontre encore d'autre probleme
j'essaye de les depatoullier

par nicolas » 09 déc. 2005, 17:04

Pourquoi tu ne boucles pas sur les éléments du tableau ?

probleme d'attribut

par jeff » 09 déc. 2005, 16:47

salut
le titre veut pas dire grand chose :oops:

j'ai un petit probleme avec ceci
public function goToElement($requete)
	{
		$xmlpath=simplexml_load_file($this->file);
		$this->result=$xmlpath->xpath($requete);
		return $this->result;
	}

	public function newNode($name,$value=null)
	{
		try{
			if(count($this->result)==1)
			$dom=dom_import_simplexml($this->result);
			else
			throw new Exception('$this->result est different de 1');
			$new=$dom->createElement($name,$value);
			$dom->appenChild($new);
		}
		catch (Exception $e){
			$e->getMessage();
		}
	}
et l'utilisation
$xml=new Xml('base.xml');
/*foreach ($xml->getElementNoeud('table','@name="moteur"') as $cle=>$val)
{
	echo $cle.'-'.$val.'<br/>';
}*/
$var=$xml->goToElement('table[@name="moteur"]');
echo var_dump($var);
$xml->newNode('field');
$xml->save();
mon probleme vient du fait que la recherche renvoi un tableau d'objet
hors je pensai que la requete m'enverai un objet noeud

j'ai l'erreur suivante sur dom_import_Elementt

Code : Tout sélectionner

Warning: dom_import_simplexml() expects parameter 1 to be object, array given in
comment fair epour contourner ce probleme
merci