【发布时间】:2013-12-09 19:04:34
【问题描述】:
尝试为我的操作人员构建一个小型仪表板,以显示给定机场当前的 NOTAM 跑道表面状况 (RSC)。我们的运营需求可以而且确实会根据天气条件和跑道条件而发生变化。
不幸的是,发布 RSC 数据的机构对页面上的所有数据使用 DIV 的通用 ID、名称和类。所以我留下了所有的数据,甚至是我不想要的东西。
这是我当前的脚本,我在其中拉出包含数据的页面,然后隐藏所有可以隐藏的元素:
<script type="text/javascript" src="jquery-1.5.2.min.js"></script>
<script type="text/javascript">
$(function() {
$("input.printcheckbox").remove();
$("div#notam_station_whole_section").appendTo("div#NOTAMRSC");
$("div#RAW").remove();
});
</script>
<?php
$str = file_get_contents("http://www.flightplanning.navcanada.ca/cgi-bin/Fore- obs/ewx_traiter_notam.cgi?Recall=ni_File&Langue=anglais&TypeBrief=L&Rayon=50&Station=CYVR");
echo "<div id=\"RAW\">";
echo $str;
echo "</div>";
?>
<div id="NOTAMRSC"></div>
如果您自己运行脚本,我会留下一堆文本,而且几乎所有内容都无关紧要。
对于此示例,我正在尝试提取 CYXX(阿伯茨福德机场)的 RSC 数据,其中唯一相关的信息是以下文本:
CYXX RSC 01/19 100 PCT DRY SN TRACE. 1312091630
CYXX RSC 07/25 100 PCT DRY SN TRACE. 1312091630
RMK: TWY ALPHA, DRY SNOW 100 PCT TRACE ALPHA 1, DRY SNOW 100 PCT
TRACE BRAVO, DRY SNOW 100 PCT TRACE CHARLIE, DRY SNOW 100 PCT
TRACE CHARLIE 1, DRY SNOW 100 PCT TRACE CHARLIE 4, DRY SNOW 100
PCT TRACE DELTA, DRY SNOW 100 PCT TRACE GOLF, DRY SNOW 100 PCT
TRACE
RMK: APN APRON I, DRY SNOW 100 PCT TRACE APRON RUN-UP, DRY SNOW 100
PCT TRACE
我一直在尝试找出一种仅在 php 中提取此 ^^ 文本的方法,但由于所有 DIV 都是相同的,我似乎无法让任何 DOM 或 REGEX 工作。
我所追求的是一个脚本来显示两个给定字符串之间的所有文本,而忽略其余部分。
对于这个例子,第一个字符串是:
000000 CYXX ABBOTSFORD
对于任何机场,它总是在我正在寻找的 RSC 数据之前(在这种情况下,机场标识符为 CYXX,在这种情况下名称为“ABBOTSFORD”,正在更改)。
然后我想要的是在该字符串之后和下一个实例之前显示任何文本:
</pre>
</span></div>
这将允许我在扩展时将这个脚本用于未来的机场,只需更改第一个字符串以匹配新机场。
非常感谢任何和所有帮助。
【问题讨论】:
-
尽管您建议“所有 DIV 都相同”。这是真的吗?它们在 DOM 层次结构中是否没有任何典型位置可用于确定所需数据的位置?
-
我想要的所有数据都位于 DIV 中,都具有相同的 ID 和 CLASS。例如:
<div id="notam_bulletin" class="notam_print_section">,然后它们有一个checkbox和一个span,它们也具有与所有其他相关数据相同的 ID。我能够稍微修改 Ed Cottrell 回答的内容,现在能够呈现我所追求的所有相关数据。 (直到网络开发人员决定再次更改他们的网站,不幸的是我还找到了原始数据馈送)。