Значения из XML-файла - PullRequest
       17

Значения из XML-файла

0 голосов
/ 26 апреля 2018

У меня есть XML-файл, который содержит имена путей изображений, местоположения GPS и ориентацию. Это подмножество из большего XML-файла, который связывает местоположения GPS с изображениями, полученными с помощью системы БПЛА.

Интересующая меня XML-часть выглядит следующим образом для 2 изображений (всего их около 180):

<?xml version="1.0" encoding="UTF8"?>
<images>
    <image path="D:\DCIM\100MEDIA\AMBA1124.jpg">
        <time value="2018:04:20 14:47:55"/>
        <gps lat="+05.90003016" lng="-055.22443772" alt="-0069.752" />
        <ori yaw="+124.65" pitch="-090.00" roll="-003.80    " />
    </image>
        <time value="2018:04:20 14:47:57"/>
        <gps lat="+05.89998104" lng="-055.22442246" alt="-0069.802" />
        <ori yaw="+179.79" pitch="-090.00" roll="-005.43    " />
    <image path="D:\DCIM\100MEDIA\AMBA1125.jpg">
        <time value="2018:04:20 14:47:59"/>
        <gps lat="+05.89998104" lng="-055.22442246" alt="-0069.802" />
        <ori yaw="+179.79" pitch="-090.00" roll="-005.43    " />
    </image>
        <time value="2018:04:20 14:48:02"/>
        <gps lat="+05.90014408" lng="-055.22444534" alt="-0069.480" />
        <ori yaw="+179.51" pitch="-090.00" roll="-006.32    " />
</images>

Правильный ли формат xml? Я придумал это:

geofile <- xmlParse(file = "../../../GEOFILE3.xml")
data <- xmlToDataFrame(nodes = getNodeSet(geofile, "/images/image"))

Но он продолжает давать мне пустую таблицу данных с правильными размерами ...

Оригинальный файл находится здесь: ссылка

Используемый мной извлеченный файл - geofile3: ссылка

В конечном счете, я хотел бы связать координаты из xml-файла с изображениями для обработки изображений в Agisoft, для этого мне нужно экспортировать в формате CSV в таком формате:

Label           X/East      Y/North     Z/Altitude

IMG_0002.JPG    261.638147  46.793178   391.780913  
IMG_0003.JPG    261.638176  46.793470   391.980780  
IMG_0004.JPG    261.638278  46.793908   393.313226  

Привет!

1 Ответ

0 голосов
/ 26 апреля 2018

Я полагаю, что у вас возникли проблемы с извлечением, поскольку значения, которые вы ищете, сохраняются как атрибуты узлов xml, а не как значения.

Это прямая проблема. Найдите узлы изображения и извлеките атрибуты, представляющие интерес. Я предпочитаю использовать пакет xml2 вместо пакета XML.

library(xml2)

page<-read_xml('<images><image path="D:/DCIM/100MEDIA/AMBA1124.jpg">
        <time value="2018:04:20 14:47:55"/>
               <gps lat="+05.90003016" lng="-055.22443772" alt="-0069.752" />
               <ori yaw="+124.65" pitch="-090.00" roll="-003.80    " />
               </image>
               <time value="2018:04:20 14:47:57"/>
               <gps lat="+05.89998104" lng="-055.22442246" alt="-0069.802" />
               <ori yaw="+179.79" pitch="-090.00" roll="-005.43    " />
               <image path="D:/DCIM/100MEDIA/AMBA1125.jpg">
               <time value="2018:04:20 14:47:59"/>
               <gps lat="+05.89998104" lng="-055.22442246" alt="-0069.802" />
               <ori yaw="+179.79" pitch="-090.00" roll="-005.43    " />
               </image>
               <time value="2018:04:20 14:48:02"/>
               <gps lat="+05.90014408" lng="-055.22444534" alt="-0069.480" />
               <ori yaw="+179.51" pitch="-090.00" roll="-006.32    " />
               </images>')

#extract the image nodes
images<-xml_find_all(page, "image")
#extract out the desired attributes
names<-xml_attr(images, "path")
locations<-xml_find_first(images, "gps")
latitude<-xml_attr(locations, "lat")
longitude<-xml_attr(locations, "lng")
alt<-xml_attr(locations, "alt")

#pack into a dataframe
answer<-data.frame(names, latitude, longitude, alt)
...