ruby-on-rails – 如何使用冒号:在nokogiri节点名称中?

我希望以下代码中的节点名称为“node:name”,而是将名称放入字段的文本中.
require 'nokogiri'

file = File.new("/Users/adamar/code/xmler/test.xml","w+")

builder = Nokogiri::XML::Builder.new do  |xml|
  xml.node:name do

  end
end

file << builder.to_xml

puts builder.to_xml

如何在nokogiri的节点名中使用冒号或其他特殊字符?

解决方法

在我看来,你有三个选择:

1.您正在使用名称空间

然后你可以声明命名空间并使用xml []方法

builder = Nokogiri::XML::Builder.new do |xml|
  xml.root('xmlns:node' => 'http://example.com') do
    xml['node'].name
  end
end

输出

<root xmlns:node="http://example.com">
  <node:name/>
</root>

如果要在根元素上添加命名空间,则此方法有点棘手,请参阅Creating an XML document with a namespaced root element with Nokogiri builder.

2.您没有使用名称空间,但希望/需要带冒号的元素名称

在这种情况下,您需要将名为“node:name”的方法发送到xml块参数.您可以使用普通的ruby发送方法执行此操作:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.root do
    xml.send 'node:name'
  end
end

这个输出

<?xml version="1.0"?>
<root>
  <node:name/>
</root>

你不确定这个“命名空间”业务到底是什么

在这种情况下,您最好避免在元素名称中使用冒号.另一种选择可能是使用 – 而不是.如果你这样做,你需要使用上面的方法2,但使用xml.send’node-name’.我包含此选项是因为您没有在问题中提及命名空间,并且在其中使用了冒号(如方法1所示),因此您更安全,不使用冒号来避免任何未来的问题.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...