从XML获取多个结果(然后根据关键字匹配丢弃某些结果)

时间:2013-04-16 20:33:33

标签: php xml

新手PHP程序员在这里(如果我甚至可以自称那个)。我目前正在研究一种循环XML文档的方法,以获取不包含特定关键字的子对象的每个实例,然后显示结果。我能够执行前面提到的但只能找到第一个子对象。

示例关注...

示例XML 以下可能有多个实例,我试图从每个不包含“Flood”的实例中获取<title>子元素“或”没有活跃的手表,警告或建议“。

<entry>
  <id>http://alerts.weather.gov/cap/wwaatmget.php?x=OHC095&amp;y=0</id>
  <updated>2013-04-16T20:00:01+00:00</updated>
  <author>
  <name>w-nws.webmaster@noaa.gov</name>
  </author>
  <title>There are no active watches, warnings or advisories</title>
  <link href='http://alerts.weather.gov/cap/wwaatmget.php?x=OHC095&amp;y=0'/>
</entry>

变量

//Lucas Co. Weather
$xml_string = file_get_contents("../../cache/weather_alerts-lucas.xml");
$weather_alerts_lucas = simplexml_load_string($xml_string);
$lucas_alert = ($weather_alerts_lucas->entry->title);
$no_alert =('There are no active watches, warnings or advisories');

显示结果 第一个if语句确定是否应该有滚动条,第二个if语句确定特定的县是否应该显示信息(有多个县但是我我只是为了简单而在这里展示一个。

if ("$lucas_alert"=="$no_alert" || fnmatch("*Flood*", $lucas_alert))
    {
      //Do Nothing. 
      } else {  
        echo "<div id='emergency_bar'>";
        echo "<span class='scroll_font' ... ...'>"; 
          if ("$lucas_alert"=="$no_alert" || fnmatch("*Flood*", $lucas_alert))
              { 
                //Do Nothing.   
                  } else {
                    echo "Lucas Co. - " . $lucas_alert . " // ";
                  }
        echo "</span>";
        echo "</div>";
      }

如果我按照上面的方式进行操作,它只会获取第一个结果,即使它抓取了<title>的多个实例,如果其中一个实例中有“Flood”字样,它也不会显示任何内容它

提前致谢。我不是在寻找有人为我编写代码,只是为了某个方向。

1 个答案:

答案 0 :(得分:1)

$xml = simplexml_load_string($x); // XML in $x
$no = "There are no active watches, warnings or advisories";

foreach ($xml->xpath("//title") as $title) {

    if ($title <> $no && strpos($title,"Flood") === false) echo "$title<br />";

}

看到它有效:http://codepad.viper-7.com/JVOoke