The*_*rus 17 ruby xml nokogiri
我正在尝试使用Nokogiri构建XML文档.一些元素中有连字符.这是一个例子:
require "nokogiri"
builder = Nokogiri::XML::Builder.new do |xml|
xml.foo_bar "hello"
end
puts builder.to_xml
Run Code Online (Sandbox Code Playgroud)
哪个产生:
<?xml version="1.0"?>
<foo_bar>hello</foo_bar>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试:
builder = Nokogiri::XML::Builder.new do |xml|
xml.foo-bar "hello"
end
Run Code Online (Sandbox Code Playgroud)
我明白了:
syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '('
xml.foo-bar "hello"
Run Code Online (Sandbox Code Playgroud)
现在我意识到这是因为连字符被解释为foo MINUS bar.
我该怎么做?
小智 43
干得好:
require 'nokogiri'
b = Nokogiri::XML::Builder.new do |xml|
xml.send(:"fooo-bar", "hello")
end
puts b.to_xml
Run Code Online (Sandbox Code Playgroud)
Viz*_*rai 27
Bart Vandendriessche的答案有效,但如果您只想在元素中使用文本字段,则可以使用更简单的解决方案.
require 'nokogiri'
b = Nokogiri::XML::Builder.new do |xml|
xml.send(:"foo-bar", 'hello')
end
puts b.to_xml
Run Code Online (Sandbox Code Playgroud)
产生:
<?xml version="1.0"?>
<foo-bar>hello</foo-bar>
Run Code Online (Sandbox Code Playgroud)
如果你需要它们嵌套,那么你可以传递一个块
require 'nokogiri'
b = Nokogiri::XML::Builder.new do |xml|
xml.send(:'foo-bar') {
xml.send(:'bar-foo', 'hello')
}
end
puts b.to_xml
Run Code Online (Sandbox Code Playgroud)
产生:
<?xml version="1.0"?>
<foo-bar>
<bar-foo>hello</bar-foo>
</foo-bar>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15355 次 |
| 最近记录: |