Пространства имен на выходе xoko Nokogiri

Я пытаюсь изолировать часть XML-документа, который использует пространства имен, используя nokogiri:

require 'nokogiri'
xml= ""
n= Nokogiri.XML(xml)
n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0].to_xml

Это игнорирует пространство имен и просто выводит

"<s:one>"
</s:one>

Как я могу сгенерировать XML с правильным пространством имен, то есть:

?

Интересно, что существует пространство имен:

> n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0]
=> #(Element:0x3fb1a05d0ed0 {
 name = "One",
 namespace = #(Namespace:0x3fb1a05d1fc4 {
 prefix = "s",
 href = "http://nmsc.com/nmsc"
 })
 })

но to_xml не включает его.

1 ответ

Если вы создадите новый XML-документ и добавите выбранный node к нему, будет добавлена ​​информация о пространстве имен:

require 'nokogiri'
xml = ""
n = Nokogiri.XML(xml)
selected = n.xpath("//s:One", :s=>"http://nmsc.com/nmsc")[0]
doc = Nokogiri::XML::Document.new
doc.root = selected
puts doc.to_xml

выход:

licensed under cc by-sa 3.0 with attribution.