Я реализую экспортер для формата данных XML, для которого требуются пространства имен. Я использую Nokogiri XML Builder (версия 1.4.0) для этого.
Однако я не могу заставить Nokogiri создать root node с пространством имен.
Это работает:
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">
Пространства имен должны быть определены перед использованием, по-видимому, поэтому нет возможности добавить его в корень node.
Я нашел вопрос об этом в списке рассылки Nokogiri, но у него не было ответов. У кого-нибудь есть решение?