反復

2017-04-27 10 views
1

を使用してXMLサブアイテムを生成し、私は10個の端子を持つXMLファイルを生成するために、このRubyのコードを使用したい:私は多くの端末を作成したいとき、私は、コードを保存するために反復使用することができますどのように反復

module WriteXML 
def write_data_xml 

    builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| 
    xml.genesis { 
    xml.terminals { 

/// create here some loop to iterate 
     xml.terminal { 
     xml.name "PPRO_Terminal" 
     xml.type "ppro" 
     xml.credentials { 
      xml.username 'user1' 
      xml.password 'passwd1' 
      xml.token '5e36e51de2dde626804a8772dc26238c4d722bbc' 
     } 
     }} 
//////// 
     } 
    end 
    puts builder.to_xml 
    file = File.new("credentials.xml", "w") 

    File.open('credentials.xml', 'w') do |file| 
    file << builder.to_xml 
    end 
end 
end 

を?

答えて

1

これらの端末を識別するデータをどこに保存するかによって、それはテーブルにありますか?この

def write_data_xml credential 

    builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| 
    xml.genesis { 
    xml.terminals { 
    xml.terminal { 
    xml.name credential.name 
    xml.type credential.type 
    xml.credentials { 
     xml.username credential.username 
     xml.password credential.password 
     xml.token credential.token 
    } 
    }} 
    } 
    end 
    File.open("credentials.xml", "a+") { |file| file.write builder.to_xml} 
end 
end 

はあなたがいないテーブル場合は、可能性があり、その後

Credentials.each do |credential| 
    write_data_xml credential 
end 

のActiveRecordを使用したと同様に、あなたが何かをすることができ、あなたが必要なデータを収集構造体の配列を使用することができます。

ここではOPの要求にEDIT、ここでは単一責任の原則

def write_data_xml 

    builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| 
    xml.genesis { 
    xml.terminals { 
     Credentials.each do |credential| 
     xml.terminal { 
     xml.name credential.name 
     xml.type credential.type 
     xml.credentials { 
     xml.username credential.username 
     xml.password credential.password 
     xml.token credential.token 
     } 
     end 
    }} 
    } 
    end 
    File.write("credentials.xml", builder.to_xml) 
end 
end 

EDIT2

に従わないバージョンがあるため、構造体の配列でこれを使用する方法の例いかなるデータベースはありませんまだ

Credentials = [] 
Credential = Struct.new(:name, :type, :username, :password, :token) 
Credentials << Credential.new('PPRO_Terminal', 'ppro', 'user1', 'passwd1', '5e36e51de2dde626804a8772dc26238c4d722bbc') 
Credentials << Credential.new('PPRO_Terminal2', 'ppro', 'user2', 'passwd2', '...') 

p Credentials 
[#<struct Credential name="PPRO_Terminal", type="ppro", username="user1", password="passwd1", token="5e36e51de2dde626804a8772dc26238c4d722bbc">, #<struct Credential name="PPRO_Terminal2", type="ppro", username="user2", password="passwd2", token="...">] 

NBは、少なくとも、本方法のこの外側を作成

+0

投稿を更新しました。 –

+0

@Peterの場合、everythigを1つの大きなメソッド(https://en.wikipedia.org/wiki/Single_responsibility_principle)に入れない方がよいでしょう。ファイルへの書き込みがメソッドのほうが優れていても、最適にはXML文字列。とにかく気にしなければ、編集時に指摘した場所に自分のループを導入することができます。 1つのファイルにすべてのXMLを、または各端末に1つのファイルが必要なのかどうかは明らかではありません。 – peter

+0

すべてを1つのファイルにまとめたいと思います。 1つの表情でタグ端末に端末を生成できるように、あなたの答えを更新できますか? –