1

これで、値をエスケープせずにxmlをビルドする方法がわかりました。値をエスケープしないようにBuilderに指示する方法

ただし、タグを動的に作成する必要があります。

望ましい結果

<bank_info>Chase</bank_info>

私が持っているのは

attr = 'bank_info'
builder = Builder::XmlMarkup.new
builder.attr { |x| x << 'bank_info' } # does not work

全部を巨大な紐にして評価してみることができます。しかし、回避はそれほど安全ではありません。私が欠けているより良いオプションはありますか?

4

2 に答える 2

5

一般に、名前のあるメソッドを呼び出す最も簡単な方法は、sendまたはを使用すること__send__です。ここ:

builder = Builder::XmlMarkup.new
builder.__send__("bank_info") do  # same effect as:  builder.bank_info do
  builder << "Chase"
end

ところで、public_sendプライベートメソッドを呼び出さないことを保証したい場合に備えて、バリアントがあります。Ruby 1.9のみで、Ruby1.8でrequire "backports"使用できます。

注:この場合、send@ KandadaBogguが指摘しているように、Builderがオーバーライドするため、機能しません。を使用する必要があります__send__

于 2010-04-22T19:10:46.120 に答える
4

これを試して:

 builder.tag! "bank_info", "Citi"
于 2010-04-22T19:14:23.703 に答える