2016-07-02 5 views
0

を交換し、私はXMLノードを置き換えるために問題を抱えている:私は古い値と新しい値を変更したい私のコードは以下のフォームにデータを入力しながら、ノードのXMLDOMとPHP

$xml = new DOMDocument("1.0", "ISO-8859-1"); 
        $xml->preserveWhiteSpace = FALSE; 
        $xml->formatOutput = TRUE; 
        $xml->load($fichier); 
        $xpath = new DOMXPATH($xml); 

        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/flagplus"); 
        foreach($query as $result){ $flagplus = $result->textContent;} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/entete"); 
        foreach($query as $result){ $entete = utf8_encode($result->textContent);} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/nouveau"); 
        foreach($query as $result){ $nouveau = $result->textContent;} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/description"); 
        foreach($query as $result){ $description = utf8_encode($result->textContent);} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/couleur"); 
        foreach($query as $result){ $couleur = $result->textContent;} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/detail"); 
        foreach($query as $result){ $detail = utf8_encode($result->textContent);} 
        $detail = str_replace('<br/>', PHP_EOL, $detail); 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/autre"); 
        foreach($query as $result){ $autre = utf8_encode($result->textContent);} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/contact"); 
        foreach($query as $result){ $contact = utf8_encode($result->textContent);} 
        $query = $xpath->query("/$racine/annonce[@id = '$annonce_no']/vente"); 
        foreach($query as $result){ $vente = utf8_encode($result->textContent);} 

        $node = $xpath->query("/$racine/annonce[@id = '$annonce_no']");    


        if (isset($_POST['submitSave'])){ 

         $id_new   = $_POST['id']; 
         $flagplus_new = $_POST['flagplus']; 
         $entete_new  = htmlentities($_POST['entete'], ENT_XML1); 
         $nouveau_new  = $_POST['nouveau']; 
         $description_new = htmlentities($_POST['description'], ENT_XML1); 
         $couleur_new  = $_POST['couleur']; 
         $detail_new  = htmlentities($_POST['detail'], ENT_XML1); 
         $autre_new  = htmlentities($_POST['autre'], ENT_XML1); 
         $contact_new  = htmlentities($_POST['contact'], ENT_XML1); 
         $vente_new  = htmlentities($_POST['vente'], ENT_XML1); 

         $node->replaceChild($id_new, $id); 
         $node->replaceChild($flagplus_new, $flagplus); 
         $node->replaceChild($entete_new, $entete); 
         $node->replaceChild($description_new, $description); 
         $node->replaceChild($couleur_new, $couleur); 
         $node->replaceChild($detail_new, $detail); 
         $node->replaceChild($autre_new, $autre); 
         $node->replaceChild($contact_new, $contact); 
         $node->replaceChild($vente_new, $vente); 

         $xml->save($fichier); 

。 DOMのドキュメンテーションは言う:公共DOMNodeをDOMNodeを::のreplaceChild(DOMNodeを$ newnode、DOMNodeを$ oldNodeが)

    <form method="post" class="thumbnail"> 
       <div> 
        <p>ID</br> 
         <input type="text" name="id" style="width:30px;" maxlength="3" value="<?php echo $annonce_no ?>" ></p> 
       </div> 
       <div> 
        <p>2ème drapeau</br> 
         <input type="text" name="flagplus" style="width:20px;" maxlength="2" value="<?php echo $flagplus ?>" >&nbsp;&nbsp;blanc,FR,GE,VD,VS</p> 
       </div> 
       <div> 
        <p>Nouveau</br> 
         <input type="text" name="nouveau" style="width:10px;" maxlength="1" value="<?php echo $nouveau ?>" >&nbsp;&nbsp;0=Non, 1=Oui</p> 
       </div> 
       <div> 
        <p>Couleur description</br> 
        <input type="text" name="couleur" style="width:10px;" maxlength="1" value="<?php echo $couleur ?>" >&nbsp;&nbsp;blanc ou R = rouge</p> 
       </div> 

       <div> 
        <p>Entete</br> 
         <input type="text" name="entete" style="width:20%" value="<?php echo $entete ?>" ></p> 
       </div> 
       <div> 
        <p>Description</br> 
         <input type="text" name="description" style="width:80%" value="<?php echo $description ?>" ></p> 
       </div> 
       <div> 
        <p>Détail annonce</br> 
         <textarea name="detail" style="width:80%" cols="200" rows="8"><?=$detail;?></textarea></p> 
       </div> 
       <div> 
        <p>Autre</br> 
         <input type="text" name="autre" style="width:80%" value="<?php echo $autre ?>" ></p> 
       </div> 
       <div> 
        <p>Contact</br> 
         <input type="text" name="contact" style="width:80%" value="<?php echo $contact ?>" ></p> 
       </div> 
       <div> 
        <p>Vente</br> 
         <input type="text" name="vente" style="width:20%;" value="<?php echo $vente ?>" ></p> 
       </div> 

       <div align="center"><input type="submit" name="submitSave" value="Enregistrer" class="btn btn-primary" style="width:150px"></div> 

       </form> 

私がメッセージを持っているフォーム:致命的なエラー:未定義の関数の呼び出しが IをREPLACECHILD私は同じ考えをしました...

ご存じですか?ありがとう!

答えて

0

$node = $xpath->query("/$racine/annonce[@id = '$annonce_no']"); DOMノードを指定することはできません。DOMノードのリストです。したがってreplaceChildメソッドを公開するオブジェクトを使用するには、少なくとも$node = $xpath->query("/$racine/annonce[@id = '$annonce_no']")->item(0);が必要です。しかし、他の変数、例えば、 $flagplus_new = $_POST['flagplus'];は、そのメソッドに渡すことのできるノードではなく、文字列値である変数$flagplus = $result->textContent;もありません。要素のコンテンツを新しい値に置き換えたい場合は、その要素を選択してtextContentを設定するのが適切なアプローチのようです。

$node = $xpath->query("/$racine/annonce[@id = '$annonce_no']")->item(0); 

は、あなたが例えばと description子を選択することができますあなたの右の要素を提供します

$descEl = $xpath->query('description', $node)->item(0); 

であり、その内容は、例えば以下のように変更される。

$descEl->textContent = $newDescription; 

唯一の欠点は、ドキュメントhttp://php.net/manual/en/class.domnode.phpが言うことである「5.6.1のTextContentプロパティが(以前はそれが読み取り専用となっている)書き込み可能行われています。」。

+0

ありがとうございます。例えば、$ node-> description-> textContent = $ description_new;私はtryied、私はもう致命的なエラーはありませんが、それはXMLファイルが変更されていないようだ –

+0

@MichelChanceは、私が示唆している私の編集を参照してください。 –

+0

@MichelChance、問題が解決したら、答えを受け入れることができます。http://stackoverflow.com/help/someone-answersを参照してください。 –

関連する問題