名前空間を必要とするXMLデータのエクスポーターを実装しています。これを行うためにNokogiriのXMLBuilder(バージョン1.4.0)を使用していますが、Nokogiriに名前空間を持つルートノードを作成させることができません。
これは機能します:
Nokogiri::XML::Builder.new { |xml| xml.root('xmlns:foobar' => 'my-ns-url') }.to_xml
<?xml version="1.0"?>
<root xmlns:foobar="my-ns-url"/>
これがそうであるように:
Nokogiri::XML::Builder.new do |xml|
xml.root('xmlns:foobar' => 'my-ns-url') { xml['foobar'].child }
end.to_xml
<?xml version="1.0"?>
<root xmlns:foobar="my-ns-url">
<foobar:child/>
</root>
ただし、次のようなものが必要ですが<foo:root>
、これは機能しません。
Nokogiri::XML::Builder.new { |xml| xml['foobar'].root('xmlns:foobar' => 'my-ns-url') }.to_xml
NoMethodError: undefined method `namespace_definitions' for #<Nokogiri::XML::Document:0x11bfef8 name="document">
明らかに、名前空間は使用する前に定義する必要があるため、ルートノードに名前空間を追加する方法はありません。
Nokogiriメーリングリストで「名前空間でルートノードを定義しますか? 」を見つけましたが、応答がありませんでした。
誰かが解決策を持っていますか?