ビルダー XML 動的要素
概要
プログラムを実行し、ビルダーメソッドを使用して要素を動的に割り当てようとしています。手順をステップ実行しながら、変数を使用して要素を動的に割り当てようとしています。この変数を要素に渡すためにいくつかのオプションを試みましたが、機能しません。
私はもともとハッシュでデータを構築することから始めましたが、完全な手順では重複キーがあるため、より直接的なものに移行する必要がありました。
ビルダーを使用して希望の効果を達成することは可能ですか
require 'builder'
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
x.instruct!
x.character do
stats = "health, mana, armor"
stats.split(",").each do |stat|
key = stat.strip.downcase
value = rand()
x.key value
end #end do
end #end do
出力
C:\Projects>ruby test.rb
<?xml version="1.0" encoding="UTF-8"?>
<character>
<key>0.1405191069855357</key>
<key>0.3484226234753265</key>
<key>0.4658284443108096</key>
</character>
望ましい出力
C:\Projects>ruby test.rb
<?xml version="1.0" encoding="UTF-8"?>
<character>
<health>0.1405191069855357</health>
<mana>0.3484226234753265</mana>
<armor>0.4658284443108096</armor>
</character>
解決策
require 'builder'
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
x.instruct!
x.character do
stats = "health, mana, armor"
stats.split(",").each do |stat|
key = stat.strip.downcase
value = rand()
x.__send__(key, value)
end
end
Ruby オブジェクトのメソッド send またはそのエイリアス send を使用できます。 ただし、send word はそのキーとしても使用できるため、オブジェクトで使用できるように公開されるのは send だけです。 言及されたメソッドのドキュメント: https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://ruby-doc.org/core-2.6.5/Object.html#method-i-send
これは強力な方法であり、簡単に機能を壊してしまう可能性があるため、必ず使用範囲を制限するようにしてください。