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

前端之家收集整理的这篇文章主要介绍了设置标签属性,并使用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>

猜你在找的Ruby相关文章