2009-09-09 6 views
1

Je suis en train d'envoyer envoyer un xml Doc d'une actionErreur d'analyse XML: indésirable après l'élément de document. Rails constructeur

Le XML est créé par la méthode suivante

def media_xml 
    x = Builder::XmlMarkup.new 
    x.instruct! 
    x.declare! :DOCTYPE, :html, :PUBLIC, "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
    x.options{ 
     x.videos{ 
      for m in self.media 
       x.imageName("static-video-image.png", "target"=>"_self", "html"=>"", "flv"=> m.filename+".flv", "autoStart"=>"false") 
      end 
     } 
    } 
    x 
end 

Dans le contrôleur j'utilise les éléments suivants

def media 
    @inspection = @tag.inspections.find params[:id] 
    respond_to do |format| 
     format.html { render :nothing => true } 
     format.xml { render :xml => @inspection.media_xml } 
    end 
end 

Et le résultat XML suivant est le résultat

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<options> 
    <videos> 
    <imageName html="" flv="3504_1245270846028.flv" autoStart="false" target="_self">static-video-image.png</imageName> 
    </videos> 
</options> 

<respond_to?:to_xml/><to_xml/> 

En raison de la « < respond_to: to_xml/> < to_xml/> » l'analyseur à l'autre bout donne l'erreur suivante

XML Parsing Error: junk after document element 

Pourquoi rails mis cela dans le document et comment puis-je me débarrasser de celui-ci ?

Merci!

Répondre

4

se trouve que ce qui se passe est le constructeur :: XmlMarkup.new était retourné par la méthode de media_xml

Cela a provoqué des appels subsiquent sur cet objet pour ajouter d'autres balises au lieu d'appeler la fonction.

def media_xml 
    x = Builder::XmlMarkup.new 
    x.instruct! 
    x.declare! :DOCTYPE, :html, :PUBLIC, "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
    x.options{ 
      x.videos{ 
        for m in self.media 
          x.imageName("static-video-image.png", "target"=>"_self", "html"=>"", "flv"=> m.filename+".flv", "autoStart"=>"false") 
        end 
      } 
    } 
    #x <= removing this fixed the problem 
end 
1

Salut, merci beaucoup! Avait le même problème et me grattait la tête en essayant de comprendre ce qui se passe sur terre.

J'ai eu une fonction simple comme celui-ci

def media_xml 
    request = Builder::XmlMarkup.new 

    request.instruct! :xml, :version => "1.0", :encoding=>"UTF-8" 

    request.favourites{ 
    request.food("banana") 
    } 

    render :xml => media_xml 
end 

.. et il donnait cette même erreur stupide. Donc, après avoir lu votre message, je séparai le constructeur xml à une autre fonction

def build_xml 
    request = Builder::XmlMarkup.new 

    request.instruct! :xml, :version => "1.0", :encoding=>"UTF-8" 

    request.favourites{ 
    request.food("banana") 
    } 
end 

Il se trouve que même si je mets une seule ligne à la fin de la fonction 'build_xml() comme « demande de retour », il va créer une erreur car il essaie d'ajouter cela à l'objet XML.