![](/img/trans.png)
[英]Namespace prefix and cdata tags in xml generation for rss feed in Ruby on Rails
[英]Ruby on Rails XML generation
我正在嘗試構建一個簡單的方法,該方法可以從Rails中的ruby數據庫中創建XML文件。 我覺得我的代碼是正確的,但是我沒有看到XML中的所有用戶。
我是RoR的新手。
這是我的代碼:
def create_file
@users = User.find(:all)
file = File.new('dir.xml','w')
doc = Document.new
make = Element.new "make"
@users.each do |y|
make.add_element "name"
make.elements["name"].text = y.name
make.add_element "description"
make.elements["description"].text = y.description
end
doc.add_element make
file.puts doc
file.close
end
和我的XML輸出:
<make>
<name>sammy</name><description>samsdescription</description>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
<name/><description/>
</make>
我不明白為什么所有字段都沒有填充。 為什么僅顯示整個數據庫之一? 我非常感謝您的幫助。
您應該調查@users.to_xml
,看看是否可以使用它而不是使用自己的解決方案。 在Rails API文檔中閱讀有關它的更多信息。
您的代碼中有一個錯誤。 在每次迭代中,您都使用add_element
創建一個元素,然后嘗試使用Elements#[]
訪問該元素。 但是,當您在Elements#[]
使用節點名稱時,它僅返回第一個匹配的節點。 因此,您將在每次迭代中創建一個節點,但僅更新第一個。 嘗試將代碼更改為以下內容:
@users.each do |y|
name_node = make.add_element "name"
name_node.text = y.name
desc_node = make.add_element "description"
desc_node.text = y.description
end
順便說一下,您的XML結構有點奇怪。 如果將每個名稱/描述對都包裝在另一個節點(例如user )中,然后有許多用戶節點,是否會更清楚?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.