0

我在解决 SimpleXML 语法时遇到了问题。

我正在尝试根据预定义的值 DELN 从较大的 xml 文档中回显一些信息:

$mytimes= simplexml_load_file('http://www.bart.gov/dev/eta/bart_eta.xml');


$freemont = $mytimes->station->abbr[DELN]->eta->destination[freemont]->estimate;
$millbrae = $mytimes->station->abbr[DELN]->eta->destination[millbrae]->estimate;
$richmond = $mytimes->station->abbr[DELN]->eta->destination[richmond]->estimate;

我的 XML:

<station>
<name>El Cerrito del Norte</name>
   <abbr>DELN</abbr>
   <date>11/30/2012</date>
   <time>07:41:02 AM PST</time>
    <eta>
         <destination>Fremont</destination>
         <estimate>14 min, 29 min, 44 min</estimate>
    </eta>
    <eta>
          <destination>Millbrae</destination>
          <estimate>6 min, 21 min, 36 min</estimate>
    </eta>
    <eta>
          <destination>Richmond</destination>
          <estimate>4 min, 10 min, 17 min</estimate>
    </eta>
</station>

如果我需要提供更多信息,请告诉我。谢谢。

4

1 回答 1

1

首先 - 我想你没有定义 DELN 常量,可能你应该使用一个字符串('DELN')。弗里蒙特、米尔布雷和里奇蒙特也是如此。问题不仅在于 SimpleXML 语法,而且基本上是它对您要阅读的 XML 结构的误解(缩写与 eta 不直接路径,与目标和估计相同)。无论如何 - xpath 将在这里成为你的朋友:

$fremont = $mytimes->xpath('//station/eta/estimate[../../abbr/text()=\'DELN\' and ../destination/text()=\'Fremont\']');
$millbrae = $mytimes->xpath('//station/eta/estimate[../../abbr/text()=\'DELN\' and ../destination/text()=\'Millbrae\']');
$richmond = $mytimes->xpath('//station/eta/estimate[../../abbr/text()=\'DELN\' and ../destination/text()=\'Richmond\']');

那么你可以这样做:

foreach ($fremont as $value) echo $value;

要不就

if (count($fremont) > 0) echo $fremont[0];
于 2012-12-01T01:51:19.607 回答