我一直在使用返回simplexml_load_file()
的{{1}}函数,为了学习目的,我尝试了 weather.gov restful服务来提供一些数据,看看如何它有效。
基本上这就是我所做的:
SimpleXMLElement
该链接属于$xml = simplexml_load_file("http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdXMLclient.php?whichClient=NDFDgen&lat=38.99&lon=-77.01&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&listLat1=&listLon1=&listLat2=&listLon2=&resolutionList=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&listEndPoint1Lat=&listEndPoint1Lon=&listEndPoint2Lat=&listEndPoint2Lon=&zipCodeList=&listZipCodeList=¢erPointLat=¢erPointLon=&distanceLat=&distanceLon=&resolutionSquare=&listCenterPointLat=&listCenterPointLon=&listDistanceLat=&listDistanceLon=&listResolutionSquare=&citiesLevel=&listCitiesLevel=§or=&gmlListLatLon=&featureType=&requestedTime=&startTime=&endTime=&compType=&propertyName=&product=time-series&begin=2004-01-01T00%3A00%3A00&end=2015-06-10T00%3A00%3A00&maxt=maxt&Submit=Submit");
var_dump($xml);
和其他服务。
现在我的问题来了:
当我抛弃变量时,有些东西引起了我的注意,我无法找到一种方法来描述它。
以下是转储变量的一部分:
weather.gov
当我看到公开object(SimpleXMLElement)[1]
public '@attributes' =>
array
'version' => string '1.0' (length=3)
public 'head' =>
object(SimpleXMLElement)[2]
public 'product' =>
object(SimpleXMLElement)[4]
public '@attributes' =>
array
...
时,我认为我可以输入变量'@attributes' => array
,但我错了,因为我知道这是正确的$xml->attributes['version']
方式,我开始想知道它是如何可能的因为$xml['version']
在这里变成了数组,但是这个代码在运行第一个代码$xml
后也能正常工作,该代码返回$xml->head->product->title
下定义的title元素的值。
它看起来像C#中的索引器。基本上这是下面c#中的有效代码:
head > product
但我想不出一种在PHP类中提供相同功能的方法。
有人可以告诉我如何在PHP中调用'public int this[int index] // Indexer declaration
{
// get and set accessors
}
,这是一个索引器吗?以及如何在PHP中实现此功能。
答案 0 :(得分:3)
可以使用索引器访问从ArrayObject
和/或实现ArrayAccess
(ArrayObject
本身实现的)继承的类的对象。虽然SimpleXMLElement
本身没有实现任何一个(它可能是一个内部实现),但您可以使用它们在自己的类中实现相同的功能。
答案 1 :(得分:1)
@
是一个Xpath字符。 XPath由SimpleXML调用,如下所示:$xml->xpath()
。例如,如果你想获得元素srsName
的属性product
,它将以某种方式显示(这个例子绝对不准确,你需要找到更多关于xpath的东西),如下所示:
$xml->xpath("product/@srsName");