Ope*_*erX 7 ruby xml ruby-on-rails nokogiri ruby-on-rails-3
我希望以下代码中的节点名称为"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
Run Code Online (Sandbox Code Playgroud)
如何在nokogiri的节点名中使用冒号或其他特殊字符?
mat*_*att 11
在我看来,你有三个选择:
然后,您可以声明命名空间并使用该xml[]方法:
builder = Nokogiri::XML::Builder.new do |xml|
xml.root('xmlns:node' => 'http://example.com') do
xml['node'].name
end
end
Run Code Online (Sandbox Code Playgroud)
输出:
<root xmlns:node="http://example.com">
<node:name/>
</root>
Run Code Online (Sandbox Code Playgroud)
如果要在根元素上添加命名空间,则此方法有点棘手,请参阅使用Nokogiri构建器创建带有命名空间根元素的XML文档.
在这种情况下,您需要将名为"node:name"的方法发送到xmlblock参数.您可以使用普通的ruby send方法执行此操作:
builder = Nokogiri::XML::Builder.new do |xml|
xml.root do
xml.send 'node:name'
end
end
Run Code Online (Sandbox Code Playgroud)
这个输出:
<?xml version="1.0"?>
<root>
<node:name/>
</root>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您最好避免在元素名称中使用冒号.替代方案可以是替代使用-.如果你这样做,你需要使用上面的方法2,但有xml.send 'node-name'.我包含这个选项是因为你没有在你的问题中提到命名空间,并且在它们中使用冒号(如方法1所示),所以你更安全,不使用冒号来避免任何未来的问题.
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |