我知道這已被回答過。我花了我的下午閱讀所有建議和課程的SimpleXML文檔。但這似乎是一種特殊情況,我真的無法完成這項工作。讀取SimpleXML元素屬性,不起作用
爲了解上下文,我在解析由hook_file_save上傳的Drupal中的GPX文件。
這就是我的NetBeans調試器對變量所說的內容。
我想讀的人在以前的帖子提出的所有方式的「LAT」從現場的屬性字段。我總是在場內檢索到的內容(請參閱lat5_1,_2,...)是另一個SimpleXMLElement,其中沒有任何內容,但CLASSNAME變量值爲「SimpleXMLElement」。
這是從GPX文件的XML文件中摘錄的。
我真的不知道我做錯了。我認爲這是因爲我隔離了變量(SimpleXMLElement行爲有點奇怪),但它不是'。 感謝您的幫助。
我加入一段代碼,一些紙條上調試變量看:
$xml = simplexml_load_file($file->uri);
$trkseg = $xml->trk->trkseg; // OK!
$trkpt = $trkseg->trkpt; // OK!
$trkpt_c = count($trkpt); // OK:1289 items
$latlon5 = $trkpt[5]->attributes(); // OK includes @attributes lat lon = 59.158234 5.867209
$latlon6 = $trkpt[6]->attributes(); // OK includes @attributes lat lon = 59.158225 5.867027
foreach ($trkseg->trkpt as $a => $b) {
$c = $b->attributes()->lat; // $b OK, $c has just classname.
echo $a, '="', $b, "\"\n";
}
$lat5_1 = $latlon5['lat']; // NO: has just CLASSNAME
$lat5_2 = $latlon5->lat; // NO: has just CLASSNAME
// $lat5_3 = $latlon5->attributes()->{'lat'};
// NOT COMPUTED! (says trying to get property of non object)
$attribute = $latlon5->attributes(); // NOT COMPUTED!
$lat5_4 = $attribute['lat']; // NOT COMPUTED!
$lat5_5 = $attribute['lon']; // NOT COMPUTED!
調試的XML摘錄
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1/">
<metadata>
<time>2009-04-06T19:08:57Z</time>
</metadata>
<trk>
<name>Imported</name>
<trkseg>
<trkpt lat="59.158021" lon="5.868032">
<ele>0</ele>
<time>2007-05-21T06:00:00Z</time>
</trkpt>
<trkpt lat="59.158028" lon="5.868011">
<ele>0</ele>
<time>2007-05-21T06:01:53Z</time>
</trkpt>
[...]
</trkseg>
</trk>
</gpx>
不是截圖,你能提供的XML代碼的簡化版本代碼的訪問它一個小樣本,作爲文本?這樣,我們可以重現問題和測試解決方案。 – IMSoP
謝謝你的建議。我只是添加了必要的代碼部分。 – donnadulcinea