2015-08-24 9 views
0

Я получаю следующее тело ответа HTTP от внешней службы.Nokogiri, возвращающий пустое место на запросы xpath

<?xml version="1.0" encoding="utf-8"?> 
<ParcelShopSearchResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://gls.dk/webservices/"> 
    <accuracylevel>EXACT</accuracylevel> 
    <parcelshops> 
    <PakkeshopData> 
     <Number>97853</Number> 
     <CompanyName>7-Eleven Artillerivej</CompanyName> 
     <Streetname>Artillerivej 50</Streetname> 
     <Streetname2>Pakkeshop: 97853</Streetname2> 
     <ZipCode>2300</ZipCode> 
     <CityName>København S</CityName> 
     <CountryCode>008</CountryCode> 
     <CountryCodeISO3166A2>DK</CountryCodeISO3166A2> 
     <Telephone>-</Telephone> 
     <Longitude>12.5835</Longitude> 
     <Latitude>55.6643</Latitude> 
     <OpeningHours> 
     <Weekday> 
      <day>Monday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Tuesday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Wednesday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Thursday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Friday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Saturday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     <Weekday> 
      <day>Sunday</day> 
      <openAt> 
      <From>00:00</From> 
      <To>24:00</To> 
      </openAt> 
      <breaks /> 
     </Weekday> 
     </OpeningHours> 
    </PakkeshopData> 
    </parcelshops> 
</ParcelShopSearchResult> 

Тем не менее, если я выполнить следующий запрос, он возвращает [], даже если он явно должен вернуть EXACT

doc  = Nokogiri::XML(response_body) 
accuracy = doc.xpath('//accuracylevel').try(:text) 

Любые идеи?

+1

Это может помочь вам: http://stackoverflow.com/questions/1737572/why-doesnt-nokogiri-xpath-like-xmlns-declarations –

ответ

3

Проблемы с пространством имен.

doc.xpath('//xmlns:accuracylevel', doc.collect_namespaces) 

или, более явно,

doc.xpath('//webserv:accuracylevel', { webserv: "http://gls.dk/webservices/" }) 
+0

Спасибо вы, Амадан, тоже помогли мне! Есть ли способ установить этот параметр для использования пространства имен глобальным способом, чтобы мне не нужно было использовать этот синтаксис для каждого вызова XPATH? – mickael

+0

@mickael Просто соберите пространства имен в переменной и 'doc.xpath (" ... ", ns)', это действительно не очень важно – Amadan

+0

Мне не нужны эти пространства имен с моего конца (я думаю), поэтому Я видел, как это работает, делая это ... doc.remove_namespaces! – mickael

Смежные вопросы