【问题标题】:Search and Parse Large XML Index from Tasker从 Tasker 搜索和解析大型 XML 索引
【发布时间】:2016-04-15 07:52:19
【问题描述】:

网站:http://w1.weather.gov/xml/current_obs/index.xml;是美国气象站的索引,标有纬度/经度坐标,可提供当前当地的天气观测。在文件中的 2257 个站点中,每 10 个线段如下所示:

<station>
    <station_id>PADK</station_id>
    <state>AK</state>
    <station_name>Adak Island, Adak Airport</station_name>
    <latitude>51.87778</latitude>
    <longitude>-176.64583</longitude>
    <html_url>http://weather.noaa.gov/weather/current/PADK.html</html_url>
    <rss_url>http://weather.gov/xml/current_obs/PADK.rss</rss_url>
    <xml_url>http://weather.gov/xml/current_obs/PADK.xml</xml_url>
</station>

目标是使用 android 手机的 GPS 和 Maps 路线信息来搜索最近的纬度/经度匹配,然后下拉 2 行并使用该 RSS 链接解析并传递给 TTS 服务;因为手机正在自动驾驶,以提供“免提”体验。从 Tasker 开始,通常会“获取”加载全局 var %HTTPD 并从那里解析的站点,但文件远远超过了可变大小限制。有人有合适的解决方法吗?

【问题讨论】:

    标签: android xml large-files tasker


    【解决方案1】:

    你应该使用HttpURLConnection,比如:

    URL url = new URL("http://w1.weather.gov/xml/current_obs/index.xml");
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    InputStream in = new BufferedInputStream(urlConnection.getInputStream());
    

    然后获取您的 InputStream 并使用 SAX Parser 解析它,例如:

     // get a new SAXParser
     SAXParser parser = factory.newSAXParser();
     // parse the stream
     parser.parse(is, handler);
    

    handler 是您的类扩展 HandlerBase 类。

    SAX Parser 是基于流的 XML 解析器。周围有很多 SAX Parser 的例子。只需谷歌即可。

    【讨论】:

    • 可能有一种简单的方法可以绕过使用 NWS XML 索引文件。一个谷歌地图意图查询国家气象服务。每个位置都链接到 srh.noaa.gov/xxx,其中该站的三个字母名称可以在标准 RSS 链接中替换,例如,“forecast.weather.gov/…”(其中 HGX 表示休斯顿/加尔维斯顿站发射机。) I'我正在研究如何从地图位置信息中捕获该链接。让你知道我是怎么做的。
    • 对不起。不知道如何显示 RSS 链接的全文。
    • 您应该编写 SAX 解析器,它会处理您的链接,并因此创建具有纬度/经度等的站点数组。基于该数组,您可以选择最接近的站点。
    • 在做了更多研究之后,我发现你的答案是正确的;提出的问题的可行解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多