19

Nokogiri を使用して XML ドキュメントを作成しようとしています。一部の要素にはハイフンが含まれています。次に例を示します。

require "nokogiri"
builder = Nokogiri::XML::Builder.new do |xml|
  xml.foo_bar "hello"
end

puts builder.to_xml

生成するもの:

<?xml version="1.0"?>
<foo_bar>hello</foo_bar>

ただし、試してみると:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.foo-bar "hello"
end

私は得る:

syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '('
  xml.foo-bar "hello"

これは、ハイフンがfoo MINUS bar.

どうすればいいですか?

4

3 に答える 3

45

どうぞ:

require 'nokogiri'

b = Nokogiri::XML::Builder.new do |xml|
  xml.send(:"fooo-bar", "hello")
end

puts b.to_xml
于 2009-12-22T16:56:35.177 に答える
29

Bart Vandendriessche の答えは機能しますが、要素内にテキスト フィールドのみが必要な場合は、より簡単な解決策があります。

require 'nokogiri'

b = Nokogiri::XML::Builder.new do |xml|
  xml.send(:"foo-bar", 'hello')
end

puts b.to_xml

生成:

<?xml version="1.0"?>
<foo-bar>hello</foo-bar>

それらをネストする必要がある場合は、ブロックを渡すことができます

require 'nokogiri'

b = Nokogiri::XML::Builder.new do |xml|
  xml.send(:'foo-bar') {
    xml.send(:'bar-foo', 'hello')
  }
end

puts b.to_xml

生成:

<?xml version="1.0"?>
<foo-bar>
  <bar-foo>hello</bar-foo>
</foo-bar>
于 2010-09-10T13:21:43.940 に答える
3

Aaron Patterson の答えは正しく、Ruby パーサーによって解釈される可能性のある文字を含む要素名に対して機能します。

アンジェラの質問に答える: この方法で作成された要素内にテキストを配置するには、次のようにすることができます:

require 'rubygems'
require 'nokogiri'

b = Nokogiri::XML::Builder.new do |xml|
  xml.send(:'foo.bar') {
    xml.text 'hello'
  }
end

puts b.to_xml
于 2010-09-10T10:11:28.427 に答える