我正在尝试使用 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>
我不知道该怎么做。如果我尝试通过向 Nokogiri 对象提供我想要的 XML 来获取它,它会准确地呈现出我需要的内容,并且内部文本位于<Option>
标签设置为children=[#<Nokogiri::XML::Text:0x80b9e3dc "hello">]
我不知道如何从构建器中设置它。
如果有人在 Nokogiri 文档中引用过该内容,我将不胜感激。
您可以使用两种方法。
Using .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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)