Ruby on rails 在rails中生成XML
我创建了一个具有操作的控制器:Ruby on rails 在rails中生成XML,ruby-on-rails,xml,Ruby On Rails,Xml,我创建了一个具有操作的控制器: def gen_books_xml @books = Book.find(:all, :conditions => {:owner_id => 1}) respond_to do |format| format.xml { render :xml => @books.to_xml(:root => "Books", :skip_types=>true) } end end 如何在图书模型sa中实现to_xml方法
def gen_books_xml
@books = Book.find(:all, :conditions => {:owner_id => 1})
respond_to do |format|
format.xml { render :xml => @books.to_xml(:root => "Books", :skip_types=>true) }
end
end
如何在图书模型sa中实现to_xml方法,使其能够生成以下格式
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<Owner>1</Owner>
<Book><title>some title</title></Book>
<Book><title>some title</title></Book>
<Book><title>some title</title></Book>
...
</Books>
1.
一些头衔
一些头衔
一些头衔
...
其中只有1个Owner元素和多个Book元素
我只能输出书籍元素,但不能输出同一级别书籍中的一个所有者。请帮忙 不是解决方案,而是黑客
@books.to_xml(...).sub("<Books>","<Books><Owner>1</Owner>")
@books.to_xml(…).sub(“,“1”)
不是解决方案,而是黑客
@books.to_xml(...).sub("<Books>","<Books><Owner>1</Owner>")
@books.to_xml(…).sub(“,“1”)
您应该使用Rails XML Builder构建它,但要注意命名约定。PS,示例未经测试,可能存在一些错误,请根据自己的判断使用。按如下方式更改控制器:
def gen_books_xml
@owner_id = 1
@books = Book.find(:all, :conditions => {:owner_id => @owner_id})
respond_to do |format|
format.xml
end
end
现在,您可以从视图中访问@owner\u id
和@books
。然后在视图/controller\u name/gen\u books\u xml.xml.builder
中创建生成器文件:
xml.instruct! # for the <?xml version="1.0" encoding="UTF-8"?> line
xml.books do # xml.foo creates foo element
xml.owner @owner_id # you're inside a block so xml.bar will create <foo><bar/></foo> elements
@books.each do |book|
xml.book do
xml.title book.title
end
end
end
xml.instruction!#排队
xml.books do#xml.foo创建foo元素
xml.owner@owner_id#您在一个块中,因此xml.bar将创建元素
@每一本书|
xml.book-do
xml.title book.title
终止
终止
终止
您可以修改此生成器,使XML看起来像您喜欢的样子。您应该使用Rails XML builder构建它,但要注意命名约定。PS,示例未经测试,可能存在一些错误,请根据自己的判断使用。按如下方式更改控制器:
def gen_books_xml
@owner_id = 1
@books = Book.find(:all, :conditions => {:owner_id => @owner_id})
respond_to do |format|
format.xml
end
end
现在,您可以从视图中访问@owner\u id
和@books
。然后在视图/controller\u name/gen\u books\u xml.xml.builder
中创建生成器文件:
xml.instruct! # for the <?xml version="1.0" encoding="UTF-8"?> line
xml.books do # xml.foo creates foo element
xml.owner @owner_id # you're inside a block so xml.bar will create <foo><bar/></foo> elements
@books.each do |book|
xml.book do
xml.title book.title
end
end
end
xml.instruction!#排队
xml.books do#xml.foo创建foo元素
xml.owner@owner_id#您在一个块中,因此xml.bar将创建元素
@每一本书|
xml.book-do
xml.title book.title
终止
终止
终止
您可以修改此生成器,使XML看起来像您喜欢的样子。感谢您的快速响应!似乎它生成了正确的文档,但也生成了以下错误消息:此页面包含以下错误消息:第1列第3行错误:下面文档末尾的额外内容是第一个错误之前的页面呈现。哦,抱歉!我有问题。我用1代替了1。这个问题已经解决了,虽然它是一个黑客,谢谢!您可以发布生成的整个XML文档吗?stackoverflow新手,不知道现在选中的复选标记,感谢您快速响应!似乎它生成了正确的文档,但也生成了以下错误消息:此页面包含以下错误消息:第1列第3行错误:下面文档末尾的额外内容是第一个错误之前的页面呈现。哦,抱歉!我有问题。我用1代替了1。这个问题已经解决了,虽然它是一个黑客,谢谢!您可以发布生成的整个XML文档吗?stackoverflow新手,不知道现在选中的复选标记,谢谢