2009-09-09 34 views
1

我試圖到從行動XML分析錯誤:文檔元素後出現垃圾。 Rails的建設者

XML是通過下面的方法

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 

創建在控制器發送XML文件我用下面的

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 

而且以下XML是結果

<?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/> 

由於的「<的respond_to:to_xml/> < to_xml/>」在另一端的解析器提供了以下錯誤

XML Parsing Error: junk after document element 

爲什麼不導軌把這個文件中,我如何擺脫它?

謝謝!

回答

4

原來,發生了什麼事是建造:: XmlMarkup.new正在從media_xml方法

返回這導致該對象的任何subsiquent調用添加的,而不是調用函數更多的標籤。

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

嘿,非常感謝!有同樣的問題,並試圖弄清楚地球究竟發生了什麼。

我做了一個簡單的函數,這樣

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 

..它是給同樣愚蠢的錯誤。所以,讀您的文章後,我分開的XML構建到另一個功能

def build_xml 
    request = Builder::XmlMarkup.new 

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

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

事實證明,即使我把一行在結束「build_xml()」功能,例如「退貨請求」,它會創建一個錯誤,因爲它試圖將其添加到XML對象。

相關問題