我正在尝试使用Builder为我正在处理的项目构建一个xml文档。 xml有一个非常严格的结构,所以我不能改变它。
我遇到的问题是这个。我正在尝试将子项添加到节点"linking-phrase-list"
孩子的名字必须是"linking-phrase"
。所以为了做到这一点,我会打电话:
test = Builder.new do |xml|
xml.map {
xml.send(:"linking-phrase-list") {
xml.linking-phrase("label" => "edge1", "id" => "idedge1")
}
}
end
当然,ruby将此解释为(xml.linking)-phrase()
,这完全不是我想要的。所以我需要知道是否有某种方法我可以说服ruby是一个函数调用而不是两个?那或告诉nokogiri我的意思是当我不使用该功能时。
答案 0 :(得分:5)
使用构建器提供的tag!
方法来实现此目的。
test = Builder.new do |xml|
xml.map {
xml.tag!("linking-phrase-list") {
xml.tag!("linking-phrase", "label" => "edge1", "id" => "idedge1")
}
}
end
答案 1 :(得分:1)
因此,您在问题中得到了答案,请使用send
方法:
require 'nokogiri'
test = Nokogiri::XML::Builder.new do |xml|
xml.map {
xml.send(:"linking-phrase-list") {
xml.send(:"linking-phrase", "label" => "edge1", "id" => "idedge1")
}
}
end
puts test.to_xml
输出:
<?xml version="1.0"?>
<map>
<linking-phrase-list>
<linking-phrase label="edge1" id="idedge1"/>
</linking-phrase-list>
</map>