0

新手 PHP 程序员在这里(如果我什至可以这样称呼自己)。我目前正在研究一种循环遍历 XML 文档的方法,以获取不包含特定关键字的子对象的每个实例,然后显示结果。我能够做到上述,但只能使用找到的第一个子对象。

示例如下...

示例 XML 可能有多个以下实例,我试图<title>从每个实例中获取不包含单词“Flood”或短语“没有活动的监视、警告或建议”的子元素。

<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>如果其中一个实例中包含“洪水”一词,它也不会显示任何内容。

提前致谢。我不是在找人为我写代码,只是一些方向。

4

1 回答 1

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

于 2013-04-16T21:44:56.113 回答