ruby-on-rails - 如何在 Nokogiri 中创建具有属性和值的 xml 元素

标签 ruby-on-rails ruby xml nokogiri

我使用的是 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/

相关文章:

ruby-on-rails - Angular JS 和 Rails 中的时区偏移

ruby-on-rails - 路由错误::没有路由匹配 [GET] "/static_pages/about"

java - 安装 Rhodes 框架时遇到问题

python - 将行转换为列

xml - 如何将 Disqus XML 导出的评论导入 Wordpress WXR

ruby-on-rails - Rails 与 Ruby CGI

ruby - 尝试安装 bro 页面 : mime-types requires Ruby version >= 1. 9.2

xml - 是否有一种 3D 格式是 SVG 的 3D 扩展?

xml - 记录自定义元素 Zend Log Formatter XML

ruby-on-rails - Vlad the Deployer - 使用模式?