У меня есть 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>
Однако элементов слишком много, и мне приходится создавать по одному объекту для каждого из них, сериализовать и сохранять в базе данных. Итак, для каждого объекта я взял узел элемента, превратил его в строку и сохранил в объекте.
Теперь, после того как я восстановил объект из БД и хочу снова проанализировать узел элемента, я пришел к этой проблеме с пространством имен.
<root><foo:bar /></root>
, и вы хотите определить пространство именfoo
до или как часть синтаксического анализа? Не могли бы вы предоставить простой пример, подобный приведенному выше, и указать, чего вы хотите достичь? - person Phrogz   schedule 02.11.2011