2009-09-09 2 views
1

Я пытаюсь отправить отправить XML-документ Doc от действияОшибка анализа XML: мусор после элемента документа. Рельсы строитель

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 

В контроллере я использую следующие

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

Оказывается, что происходит это Builder :: XmlMarkup.new был возвращается из метода media_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 <= 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.

 Смежные вопросы

  • Нет связанных вопросов^_^