2012-07-27 30 views
0

有我的代碼:我可以使用Ruby/Builder在xml節點中寫入內容嗎?

require 'builder' 

def initXML(builder) 
    builder.instruct! 
    builder.results(:result => 'result'){} 
end 
def writeXML(builder,name,hello)  
    builder.test(:name => name){ 
     builder.hello hello 
     } 
end 
builder = Builder::XmlMarkup.new(:target=> STDOUT, :indent=>4) 
initXML(builder) 
writeXML(builder,'name1','hello1') 
writeXML(builder,'name2','hello2') 

執行,我得到這個XML:

<?xml version="1.0" encoding="UTF-8"?> 
<results result="result"> 
</results> 
<test name="name1"> 
    <hello>hello1</hello> 
</test> 
<test name="name2"> 
    <hello>hello2</hello> 
</test> 

但我想在文件末尾的</results>結束標記。有一種在<results>節點內寫入的方法?或者將</results>移動到文件末尾?最好使用Nokogiri?或者更好地手動生成我的XML?我試圖在Watir單元測試中使用它,我可以使用它來將結果寫入XML文件嗎?

(更新)這就是我想要的XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <results result="result">  
    <test name="name1"> 
     <hello>hello1</hello> 
    </test> 
    <test name="name2"> 
     <hello>hello2</hello> 
    </test> 
    </results> 

感謝。

回答

0

它的寫法正是你告訴它。

將一個塊傳遞到initXML(在慣用Ruby,IMO中爲init_xml)並執行它。但我不會稱之爲init_xml,因爲你實際上在做的是包裝XML內容。

我不確定你想要完成什麼;這很容易使用正常的構建器語義來完成。如果你想從一個方法返回XML節點,可能考慮將當前節點傳遞給一個方法。不知道你想要做什麼,很難提供建議。

+0

我將用我想要的XML的示例更新我的問題。 – Marcelo 2012-07-27 20:16:42

+0

@Marcelo我們理解你想要的XML,我問你用什麼方法來完成。在你給的例子中,沒有太多理由使用它們;它使用普通建造者的時間基本上很短。 – 2012-07-27 20:46:05

+0

我想使用測試/單元在Watir上運行測試,在每次測試中,我想在XML中寫入結果和其他內容,調用我的方法,但是當我將標記''設置爲'時,構建器會自動關閉標記,我想寫標籤,將結果寫入''內的標籤中,然後在結尾用''關閉測試。我對Ruby很熟悉,我不知道我是否可以用builder來做到這一點。 – Marcelo 2012-07-28 02:24:29

相關問題