我正在尝试使用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
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>