我需要形成这样的xml:
<jobs>
<job>
<title><![CDATA[cleaner]]></title>
<description><![CDATA[cleaner in af]]></description>
<text><![CDATA[cleaner weekly in af]]></text>
<referencenumber><![CDATA[518]]></referencenumber>
<company><![CDATA[we q.]]></company>
<country_code><![CDATA[NL]]></country_code>
<city><![CDATA[af]]></city>
<url><![CDATA[url]]></url>
</job>
</jobs>
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.jobs {
data.each do |data|
xml.job {
xml.title {
xml.cdata "..."
}
xml.text {
xml.cdata "..."
}
end
}
end
以上操作无效,因为text
是builder上的现有方法。
如何创建<text>...</text>
节点?
答案 0 :(得分:3)
来自docs:
构建器通过使用method_missing进行工作。不幸的是,红宝石中定义了一些很难去除或危险的方法。例如,您可能想创建名称为“ type”,“ class”和“ id”的标签。在这种情况下,您可以使用下划线从方法调用中消除标记名称的歧义。
添加下划线也适用于“文本”,即改为使用text_
:
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.job {
xml.text_ {
xml.cdata 'foo bar baz'
}
}
end
puts builder.to_xml
输出:
<?xml version="1.0" encoding="UTF-8"?>
<job>
<text><![CDATA[foo bar baz]]></text>
</job>