2009-09-09 33 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对象。

相关问题