设置标签属性,并使用nokogiri builder(ruby)向标签添加纯文本内容

我正在尝试使用Nokogiri构建 XML,并在标签中包含属性和纯文本.所以我试图得到这个:
<?xml version="1.0"?>
<Transaction requestName="OrderRequest">
  <Option b="hive">hello</Option>
</Transaction>

使用构建器我有这个:

builder = Nokogiri::XML::Builder.new { |xml|
  xml.Transaction("requestName" => "OrderRequest") do
    xml.Option("b" => "hive").text("hello")
  end
}

这样做:

<Transaction requestName="OrderRequest">
  <Option b="hive" class="text">hello</Option>
</Transaction>

所以它产生
< Option b =“hive”class =“text”> hello< / Option>
在那里我会喜欢它
< Option b =“hive”> hello< / Option>

我不知道该怎么做如果我尝试通过将所需的XML提供给一个Nokogiri对象,那么它将使用< Option>标签设置为children = [#< Nokogiri :: XML :: Text:0x80b9e3dc“hello”>],我不知道如何从构建器设置.

如果有人在Nokogiri文档中提到了这一点,我将不胜感激.

解决方法

有两种方法可以使用.

使用.text

您可以调用.text方法来设置节点的文本:

builder = Nokogiri::XML::Builder.new { |xml|
  xml.Transaction("requestName" => "OrderRequest") do
    xml.Option("b" => "hive"){ xml.text("hello") }
  end
}

产生:

<?xml version="1.0"?>
<Transaction requestName="OrderRequest">
  <Option b="hive">hello</Option>
</Transaction>

解决方案使用文本参数

或者,您可以将文本作为参数传递.该文本应该在属性值之前传递.换句话说,标签以下列形式添加:

tag "text",:attribute => 'value'

在这种情况下,所需的构建器将是:

builder = Nokogiri::XML::Builder.new { |xml|
  xml.Transaction("requestName" => "OrderRequest") do
    xml.Option("hello","b" => "hive")
  end
}

生成相同的XML:

<?xml version="1.0"?>
<Transaction requestName="OrderRequest">
  <Option b="hive">hello</Option>
</Transaction>

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...