1

我正在制作一个简单的基于 Web 的应用程序,它显示到达我家附近地铁站的火车的到达时间(以分钟为单位)。

Metro(华盛顿特区的地铁)发布了一个 API,允许开发人员访问此信息:http: //developer.wmata.com/docs/read/GetRailStationInfo

当我使用上面链接中的示例代码时,我得到一个标记文本列表,如下所示:

<AIMPredictionResp xmlns="http://www.wmata.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Trains>
<AIMPredictionTrainInfo>
<Car>6</Car>
<Destination>NewCrltn</Destination>
<DestinationCode>D13</DestinationCode>
<DestinationName>New Carrollton</DestinationName>
<Group>1</Group>
<Line>OR</Line>
<LocationCode>K03</LocationCode>
<LocationName>Virginia Square</LocationName>
<Min>7</Min>
</AIMPredictionTrainInfo>
</Trains>

我只想显示< Min > </Min > 标签中的分钟数。解决这个问题的最佳方法是什么?是否有一个我可以编写的 PHP 脚本来提取那个数字?如果是这样,你能指出我正确的方向吗?

谢谢!

更新:

非常感谢大家。我已经尝试了您发送的教程中的一个示例,但是当我在其中切换我的 URL(带键)时,它不会显示任何内容。

<?php 
$trainInfo = simplexml_load_file("api.wmata.com/StationPrediction.svc/GetPrediction/_KEYXXXXXXXX); 

print $trainInfo->AIMPredictionTrainInfo->LocationName; 
print $trainInfo->AIMPredictionTrainInfo->Min; 

?>
4

2 回答 2

1

这是一个使用DOMXPath(测试)的例子。重要的是注册默认命名空间:

$data = <<<EOF
<?xml version="1.0"?>
<AIMPredictionResp xmlns="http://www.wmata.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Trains>
<AIMPredictionTrainInfo>
<Car>6</Car>
<Destination>NewCrltn</Destination>
<DestinationCode>D13</DestinationCode>
<DestinationName>New Carrollton</DestinationName>
<Group>1</Group>
<Line>OR</Line>
<LocationCode>K03</LocationCode>
<LocationName>Virginia Square</LocationName>
<Min>7</Min>
</AIMPredictionTrainInfo>
</Trains>
</AIMPredictionResp>
EOF;

$doc = new DOMDocument();
$doc->loadXML($data);

$selector = new DOMXPath($doc);
$selector->registerNamespace(
    'default', 
    'http://www.wmata.com'
);

$query = '//default:Min';
foreach($selector->query($query) as $node) {
    var_dump($node->nodeValue);
}

输出:

string(1) "7" 
于 2013-05-08T00:05:44.213 回答
1

您想要被拉入的方向是SimpleXML

示例(未测试):

<?php
$xml = new SimpleXMLElement($my_input_xml);

echo $xml->getMin() . "<br>";

?> 

以下是其他一些不错的教程:

'希望有帮助!

于 2013-05-08T00:00:17.073 回答