XPath и Hpricot - работает на одних машинах, а не на других? - PullRequest
0 голосов
/ 21 декабря 2009

Следующий код hpricot успешно извлекает STPeriods в XML на двух моих компьютерах (Vista и сервер Ubuntu), но не работает на другом ноутбуке Ubuntu. Все машины имеют Hpricot v0.82

Есть идеи? Полностью озадачен.

Код Hpricot:

  (doc/"WeatherFeed/Location/WxShortTerm/STPeriod").each do |ham_forecast|

XML-файл

<?xml version="1.0" encoding="ISO-8859-1" ?>
<WeatherFeed>
  <Location ID="EINN" name="Shannon Airport" state="" country="IE" tz="0" tzname="GMT">
    <Astro>
      <AstroPeriod Day="WED" Date="2009-12-16" Sunrise="8:41 AM GMT" Sunset="4:20 PM GMT" Moonrise="9:03 AM GMT" Moonset="4:02 PM GMT" MoonIllum="4%" MoonAge="0" MoonPhase="Waxing Crescent Moon" MoonIcon="1"/>
      <AstroPeriod Day="THU" Date="2009-12-17" Sunrise="8:42 AM GMT" Sunset="4:20 PM GMT" Moonrise="9:46 AM GMT" Moonset="5:05 PM GMT" MoonIllum="10%" MoonAge="1" MoonPhase="Waxing Crescent Moon" MoonIcon="1"/>
    </Astro>
    <WxOb StationID="EINN" TempC="7" TempF="45" ApparentC="5" ApparentF="41" DewPointC="6" DewPointF="43" RelativeHumidity="93" WindSpeedKnots="8" WindSpeedMPH="9" WindDirection="320" WindDirectionEng="NW" WindGustKnots="0" WindGustMPH="0" PressureMB="1013" PressureIN="29.88" Wx="Mostly Cloudy" Icon="mcloudyn.gif" Visibility="&gt;10km" VisibilityKM="16.09" VisibilityMI="10" ReportEpoch="1260999000" ReportDate="2009-12-16 21:30 UTC"/>
    <WxShortTerm ID="EINN">
      <STPeriod interval="1" Epoch="1261018800" Day="Thu" Date="2009-12-17" Time="03:00" Wx="Overcast" Icon="cloudyn.gif" TempC="6" TempF="42" Pop="0" QPFmm="0" QPFin="0" DewPointC="4.4" DewPointF="40" RelativeHumidity="92" WindSpeedKnots="12" WindSpeedMPH="14" WindDirectionEng="NE"/>
      <STPeriod interval="2" Epoch="1261029600" Day="Thu" Date="2009-12-17" Time="06:00" Wx="Mostly Cloudy" Icon="mcloudyn.gif" TempC="4" TempF="39" Pop="0" QPFmm="0" QPFin="0" DewPointC="3" DewPointF="37" RelativeHumidity="93" WindSpeedKnots="11" WindSpeedMPH="13" WindDirectionEng="NE"/>
      <STPeriod interval="3" Epoch="1261040400" Day="Thu" Date="2009-12-17" Time="09:00" Wx="Partly Cloudy" Icon="pcloudy.gif" TempC="2" TempF="36" Pop="0" QPFmm="0" QPFin="0" DewPointC="1.4" DewPointF="35" RelativeHumidity="95" WindSpeedKnots="10" WindSpeedMPH="12" WindDirectionEng="NE"/>
      <STPeriod interval="4" Epoch="1261051200" Day="Thu" Date="2009-12-17" Time="12:00" Wx="Partly Cloudy" Icon="pcloudy.gif" TempC="4" TempF="38" Pop="0" QPFmm="0" QPFin="0" DewPointC="1.6" DewPointF="35" RelativeHumidity="87" WindSpeedKnots="12" WindSpeedMPH="14" WindDirectionEng="NE"/>
      <STPeriod interval="5" Epoch="1261062000" Day="Thu" Date="2009-12-17" Time="15:00" Wx="Mostly Cloudy" Icon="mcloudy.gif" TempC="3" TempF="37" Pop="0" QPFmm="0" QPFin="0" DewPointC="1" DewPointF="34" RelativeHumidity="87" WindSpeedKnots="12" WindSpeedMPH="14" WindDirectionEng="NE"/>
      <STPeriod interval="6" Epoch="1261072800" Day="Thu" Date="2009-12-17" Time="18:00" Wx="Mostly Cloudy" Icon="mcloudyn.gif" TempC="3" TempF="37" Pop="0" QPFmm="0" QPFin="0" DewPointC="0.9" DewPointF="34" RelativeHumidity="89" WindSpeedKnots="12" WindSpeedMPH="14" WindDirectionEng="NE"/>
      <STPeriod interval="7" Epoch="1261083600" Day="Thu" Date="2009-12-17" Time="21:00" Wx="Mostly Cloudy" Icon="mcloudyn.gif" TempC="2" TempF="36" Pop="0" QPFmm="0" QPFin="0" DewPointC="0.2" DewPointF="32" RelativeHumidity="88" WindSpeedKnots="11" WindSpeedMPH="13" WindDirectionEng="NE"/>
      <STPeriod interval="8" Epoch="1261094400" Day="Fri" Date="2009-12-18" Time="00:00" Wx="Partly Cloudy" Icon="pcloudyn.gif" TempC="-0" TempF="32" Pop="0" QPFmm="0" QPFin="0" DewPointC="-2.1" DewPointF="28" RelativeHumidity="87" WindSpeedKnots="10" WindSpeedMPH="11" WindDirectionEng="NE"/>
    </WxShortTerm>
  </Location>
</WeatherFeed>

Ответы [ 3 ]

1 голос
/ 22 декабря 2009

Поскольку я не мог найти просветления здесь или где-либо еще, я переключился с Hpricot на Nokigiri, и теперь он работает безупречно на всех машинах. API-интерфейсы практически полностью совместимы, поэтому переключение заняло менее 10 минут. Кроме того, я чувствую, что Nokogiri более активно поддерживается, хотя он не зависит от libxml2.

0 голосов
/ 05 января 2010

не должно быть на самом деле поиском Hpricot:

(doc/"/WeatherFeed/Location/WxShortTerm/STPeriod")

Уведомление дополнительно "/"

Кроме того, когда у меня были ошибки, когда Hpricot не смог найти элементы, это было из-за ошибки синтаксического анализа / некорректного документа. Удобно записать документ Hpricot в текстовый файл, чтобы вы могли видеть, делает ли он что-то странное, например закрывающие теги, где он не должен . (Интересно, это та ошибка, которую вы видите?).

0 голосов
/ 21 декабря 2009

Убедитесь, что файл имеет одинаковую кодировку на каждом компьютере. Возможно, что-то напало на перевод?

Попробуйте команду linux file -i myfile.txt на каждой машине и посмотрите, получите ли вы тот же ответ.

...