1

アクションから xml Doc を送信しようとしています

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

Rails がこれをドキュメントに記載するのはなぜですか?どうすれば削除できますか?

ありがとうございました!

4

2 に答える 2

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
于 2009-09-10T19:01:22.993 に答える
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()」関数の最後に「return request」のような 1 行を追加しても、それを XML オブジェクトに追加しようとするため、エラーが発生します。

于 2010-06-04T02:09:44.323 に答える