【问题标题】:How to parse this NOAA Weather Alert CAP in PHP?如何在 PHP 中解析这个 NOAA 天气警报 CAP?
【发布时间】:2011-01-11 16:19:06
【问题描述】:

您好,

我在理解如何在 PHP 中解析 NOAA 的 Weather Alert CAP 时遇到了一些困难。我需要执行以下操作:

  • 在提要中找到正确的县
  • 验证是否存在活动警报
  • 显示警报的描述

我正在使用的提要位于此地址 - http://www.weather.gov/alerts/va.cap 我过去曾用simplexml_load_string() 处理这类事情,但它似乎不适用于此提要。

谢谢!

【问题讨论】:

  • “似乎不起作用”?请解释。 simplexml_load_string 返回什么?
  • 很抱歉。它返回一个空数组

标签: php weather


【解决方案1】:

在 Google 上呆了一段时间后,我发现了一个完全符合我要求的脚本。与其尝试重新发明轮子,我将继续这样做。 http://saratoga-weather.org/scripts-atom.php#atomadvisory

【讨论】:

    【解决方案2】:

    由于命名空间,您可能遇到了问题

    <cap:alert xmlns:cap='http://www.incident.com/cap/1.0'>
    

    这应该让您了解如何提取信息

    $sxe = simplexml_load_file('http://www.weather.gov/alerts/va.cap');
    foreach ($sxe->getDocNamespaces() as $ns => $uri) {
        $sxe->registerXPathNamespace($ns, $uri);
    }
    foreach($sxe->xpath('//cap:areaDesc') as $areaDesc) {
        echo $areaDesc;
    }
    

    顺便说一句,SimpleXml 仅适用于简单的 XML。考虑改用 DOM。

    【讨论】:

    • 好的,这看起来是朝着正确方向迈出的一步。您的代码输出所有区域并让我了解结构。但是如何深入到一个县,确定是否有活动警报,并输出详细信息?
    • @Night 描述中的县是?对不起,我不是美国人。什么是主动警报?
    • //cap:areaDesc 输出一个县的名称,我试图将整个县列表缩小到一个并检索该特定县的信息。例如,仅 Wise (VA) 的详细信息。
    • @Night 你怎么知道有“活动警报”。文件中的内容告诉你什么?
    • @Night 好吧,这可能是最好和最简单的解决方案。但是,如果您在提出问题之前进行此类研究,我将不胜感激。花费 我的 时间试图帮助解决 您的 问题,然后留下评论告诉我我的努力被浪费了,这有点烦人。我不希望您接受我的回答,但如果您点赞或至少感谢您会很好。
    猜你喜欢
    • 2011-12-09
    • 2021-05-29
    • 2013-10-25
    • 2013-12-15
    • 2014-03-31
    • 2011-05-21
    • 2011-04-25
    • 2020-11-25
    • 2021-03-29
    相关资源
    最近更新 更多