【问题标题】:How to create <text>...</text> node in Nokogiri?如何在 Nokogiri 中创建 <text>...</text> 节点?
【发布时间】:2019-12-04 20:16:14
【问题描述】:

我需要形成这样的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 是构建器上的现有方法。

如何创建&lt;text&gt;...&lt;/text&gt; 节点?

【问题讨论】:

    标签: ruby xml nokogiri


    【解决方案1】:

    来自docs

    构建器通过利用 method_missing 来工作。不幸的是,在 ruby​​ 中定义了一些很难或很危险的方法。例如,您可能希望创建名称为“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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 2014-03-18
      • 2014-11-24
      • 2011-01-26
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多