假設我有以下XML文檔。我使用Ruby 1.9.3,Rails 3.2.6和Nokogiri 1.5.5將XML解析到數據庫中。我希望能夠遍歷XML標籤並按正確的順序挑選元素。使用Ruby循環解析XML文檔
<?xml version="1.0"?>
<RandomTag>
<library name='Favorite Books'>
<book ISBN="11342343">
<title>TKAM</title>
<description>Desc1</description>
<author>H Lee</author>
</book>
<book ISBN="989894781234">
<title>Catcher in the Rye</title>
<description>Desc2</description>
<author>JD S</author>
</book>
</library>
<library name='Other Books'>
<book ISBN="123456789">
<title>Murphy\'s Gambit</title>
<description>Desc3</description>
<author>Syne M</author>
</book>
</library>
</RandomTag>
我使用類似於下面來遍歷一個循環:
f = File.open(args[:file])
doc = Nokogiri::XML(f)
f.close
doc.css('library').each do |node|
children = node.children
lib = {"name" => node['name']}
Library.create(lib)
doc.css('book').each do |n|
churn = n.children
book = {#book elements}
Book.create(book)
end
end
所以我基本上是尋找一個庫,然後一旦我找到了,我在尋找該圖書館內的所有書籍。我目前的代碼的問題是.css()方法搜索,直到EOF。因此,無論圖書館駐留在哪一個圖書館中,內部的「圖書」循環都會觸發。另外,一旦我打開了第二個圖書館,「圖書」循環又從文檔開始處開始,繼續閱讀每本書。最終的結果是我得到正確數量的正確名稱的圖書館,但每個圖書館都有每本書。當我點擊一個新的「圖書館」標籤時,我需要一種方法來停止搜索書籍(從內部循環中斷開)。
是否有不同的方法比.css()會做到這一點?有什麼方法可以在循環中寫入break語句來退出特定情況?
當然。大概本該想出一個我自己哈哈......謝謝! – 2012-07-11 16:20:57