我使用的是 Rails 2.1.0 和 Nokogiri 1.6.1。我想要的似乎很简单。我希望我的 Rails Rest API 返回带有如下元素的 XML:
<PeopleNumber unit="NumberOfPeople">2.235075</PeopleNumber>
我试过这样写:
xml = Nokogiri::NML::Builder.new do |xml|
xml.PeopleNumber(:unit => "NumberOfPeople") 2.235075
ActionController 引发语法错误。
如果我尝试将其重写为
xml = Nokogiri::NML::Builder.new do |xml|
xml.PeopleNumber(:unit => "NumberOfPeople") { 2.235075 }
我得到类似的东西
<PeopleNumber unit="NumberOfPeople" />
有谁知道在 Nokogiri 中获得所需行为的方法吗?
最佳答案
我知道这是一个很老的问题,但即使我偶然发现了同样的问题。
我找到了一个干净的解决方案。
builder = Nokogiri::NML::Builder.new do |xml|
xml.PeopleNumber(2.235075, :unit => "NumberOfPeople")
end
现在,如果您调试 XML 输出,您将获得正确的输出
puts builder.to_xml
# output will be following
<PeopleNumber unit="NumberOfPeople">2.235075</PeopleNumber>
解释: 当您想使用 Nokogiri 构建器将一些属性和文本内容设置为 XML 标记时,您需要直接将文本内容作为第一个参数传递,然后将其他属性作为键值对传递,就像我们传递给任何方法一样。
builder = Nokogiri::NML::Builder.new do |xml|
xml.YourTagName(PLAIN_TEXT_CONTENT, attr1: value1, attr2: value2, attrN: valueN)
end
这将输出为
puts builder.to_xml
# output will be following
<YourTagName attr1="value1" attr2="value2" attrN="valueN">PLAIN_TEXT_CONTENT</YourTagName>
即使有其他方法,但这是最干净的方法。
关于ruby-on-rails - 如何在 Nokogiri 中创建具有属性和值的 xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26118212/