生成器XML动态元素

我试图通过程序运行,并使用builder方法动态分配元素。在逐步执行过程时,我尝试使用变量动态分配元素。我尝试了一些方法来使此变量虽然传递到元素中,但不起作用。

我最初是通过将数据构建为散列开始的,但是在我的整个过程中,我有重复的密钥,因此我不得不移到更直接的地方。

是否可以使用Builder达到我想要的效果

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>
abcd_219616 回答:生成器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.__send__(key,value)
  end
end

您可以使用ruby对象方法send或其别名__send__。 但是由于send单词也可以用作其键,因此只有 send 可以用于该对象。 上述方法的文档: https://ruby-doc.org/core-2.6.5/Object.html#method-i-send

  

调用由符号标识的方法,并向其传递任何参数   指定。如果名称发送带有冲突的名称,则可以使用__send__   obj中的现有方法。当方法由字符串标识时,   字符串将转换为符号。

由于它是一种强大的方法,因此请务必尝试限制其使用范围。

本文链接:https://www.f2er.com/3169212.html

大家都在问