使用nokogiri生成器(ruby)设置标记属性并向标记添加纯文本内容



我正在尝试使用Nokogiri构建XML,其中一些标记内具有属性和纯文本。所以我想写这个:

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

使用builder我有这个:

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>

相关内容

  • 没有找到相关文章

最新更新