1

Now I know how to build xml without escaping values. How to tell Builder to not to escape values

However I need to build tags dynamically.

Desired result

<bank_info>Chase</bank_info>

What I have is

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

I can try making the whole thing as a giant string and eval that. But evaling is not that safe. Is there a better option that I am missing.

4

2 回答 2

5

通常,调用您有名字的方法的最简单方法是使用sendor __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 中,您可以require "backports"在 Ruby 1.8 中使用它。

注意:在这种情况下,send正如@KandadaBoggu 所指出的那样,它不起作用,因为 Builder 覆盖了它;你必须使用__send__.

于 2010-04-22T19:10:46.120 回答
4

尝试这个:

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