Nokogiri разбор возврата Rackspace с использованием XPath в Rails - PullRequest
0 голосов
/ 24 мая 2010

Я использую Nokogiri для синтаксического анализа возврата из API Rackspace, поэтому я использую их пример кода для

   response = server.get '/customers/'+@user.customer_id.to_s+'/domains/', server.xml_format
   doc = Nokogiri::XML::parse response.body
   puts "xpath values"
   doc.xpath("//name").each do |node|
   puts
     node.text
   end

. В качестве моего кода я использую Nokogiri для возврата списка узлов узлов элемента

по какой-то причине я, кажется, упустил что-то очевидное, и я просто не могу заставить его проанализировать список узлов и вернуть их мне, есть ли что-то простое, что я могу сделать, чтобы исправить это?вернуть список узлов?

Вот пример XML, который я пытаюсь проанализировать:

   <domainList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:xml:domainList">
  <offset>0</offset>
  <size>50</size>
  <total>4</total>
  <domains>
    <domain>
      <name>domain1.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
    <domain>
      <name>domain2.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
    <domain>
      <name>domain3.com</name>
      <accountNumber>xxxxxxx</accountNumber>
      <serviceType>exchange</serviceType>
    </domain>
  </domains>
</domainList>

Cheers

1 Ответ

2 голосов
/ 24 мая 2010

Кажется, проблема в том, что вы должны рассказать Нокогири об их пространстве имен.

Если вы удалите xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:xml:domainList" из тега domainLists, вы увидите, что ваш запрос работает.

В противном случае вам нужно сообщить Нокогири об этом пространстве имен.

doc.xpath("//blarg:name", {'blarg' => 'urn:xml:domainList'}).each do |name|
  puts name.text
end

Nokogiri xpath принимает второй аргумент, который представляет собой хэш пространств имен. У вас есть xml, который определяет общее пространство имен, но не дает ему тега. Я не знаю, есть ли у nokogiri способ просто найти это, поэтому вместо этого при поиске просто дайте вашему поиску произвольный тег и сопоставьте путь пространства имен с этим тегом. Вы можете поместить любой текст, который вы хотите, вместо blarg, это было только для примера.

...