У меня есть XML-документ, в котором отсутствует некоторое объявление пространства имен.Я знаю, что могу определить его, когда использую метод doc.xpath()
, например:
doc.xpath('//dc:title', 'dc' => 'http://purl.org/dc/elements/1.1/')
Однако я хотел бы добавить его один раз, так как у меня много вызовов xpath.
Я узнал, что мой Nokogiri::XML::Document
унаследован от Nokogiri::XML::Node
.А класс Node содержит метод add_namespace()
.Однако я не могу назвать его, потому что он говорит, что он не определен.
Это потому, что Ruby не позволяет вызывать функции родительского класса?Есть ли способ обойти это?
РЕДАКТИРОВАТЬ
Я добавляю следующий пример консоли:
> c = Nokogiri.XML(doc_text)
> c.class
=> Nokogiri::XML::Document
> c.add_namespace('a','b')
NoMethodError: undefined method `add_namespace' for #<Nokogiri::XML::Document:0x007fea4ee22c60>
А вот документ API о Nokogiri :: XML-класс
РЕДАКТИРОВАТЬ снова:
Исходный документ был действительным xml следующим образом:
<root xmlns:ra="...">
<item>
<title/>
<ra:price/>
</item>
<item>...
</root>
Однако слишком много элементов, и я долженсоздать один объект для каждого из них, сериализовать и сохранить в базе данных.Таким образом, для каждого объекта я взял узел элемента, превратил его в строку и сохранил в объекте.
Теперь, после того как я восстановил объект из БД и хочу снова проанализировать узел элемента, я пришел к этой проблеме с пространством имен.