Я знаю, что на это был дан ответ раньше. Разумеется, я провел свой день, читая все предложения и документацию SimpleXML. Но это похоже на особый случай, и я действительно не могу сделать эту работу.Чтение атрибутов элемента SimpleXML, не работает
Чтобы узнать контекст, я разбираю файл GPX в Drupal после его загрузки с помощью hook_file_save.
Это то, что мой отладчик NetBeans говорит о переменных.
Я пытался читать «широчайшие» поля из атрибута поля во всех отношениях людей, предложенных в предыдущем посте. То, что я всегда получаю внутри поля (см. Lat5_1, _2, ...), является еще одним SimpleXMLElement с отсутствием внутри, но CLASSNAME variable value "SimpleXMLElement".
Это отрывок из файла XML, который является файлом GPX.
Я действительно не знаю, где я делаю неправильно. Я думал, что это потому, что я изолировал переменную (поведение 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