Я обрабатываю файл gpx, который напоминает xml. Вот выдержка из этого файла:Как добавить элемент XML A в элемент B, который не имеет A в качестве дочернего элемента
<trkpt lat="3.1398377" lon="101.6937661">
<ele>0.0</ele>
<time>2013-01-01T00:00:00.000Z</time>
<name>Position 1</name>
</trkpt>
<trkpt lat="3.1250538" lon="101.6783237">
<ele>0.0</ele>
<name>Position 460</name>
</trkpt>
Как вы можете видеть, некоторые из <trkpt>
элементов содержат <time>
элемент, а некоторые нет. Как добавить <time>
к тем <trkpt>
элементам, которые не содержат его?
Хотя файл читается, это приводит к ошибке, если узел XML не содержит <time>
:
foreach $points ($root->getElementsByTagName('trkpt')) {
my($lat) = $points->findvalue('@lat');
my($lon) = $pints->findvalue('@lon');
my($time) = $points->getElementsByTagName('time')->[0]->textContent();
my($pointName) = $points->getElementsByTagName('name')->[0]->textContent();
}
Невозможно вызвать метод «TextContent» на неопределенное значение в ...
Как я могу сделать его более умным? То есть, если он встречает undefined $time
, он будет записывать <time>
в файл gpx, и ошибка не возникает.
В вашем файле есть несколько элементов 'trkpt', или вы показываете два файла в вашем примере? – Borodin
Да, есть много элементов 'trkpt'. Что я хочу сделать, вставьте элемент '
ОК, тогда как большой файл? 'XML :: Twig' может быть лучшим вариантом. – Borodin