微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置标签属性,并使用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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐