如何在Nokogiri中创建<text> ... </text>节点?

时间:2019-12-04 11:37:48

标签: ruby xml nokogiri

我需要形成这样的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>节点?

1 个答案:

答案 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>