2016-10-12 7 views
1

Я пытаюсь преобразовать пользовательский файл gpx, используемый extension of OpenCPN в стандартный файл gpx.gpxpy не выводит расширения в to_xml()

Я хочу сохранить как можно больше полей, включая расширения. Я могу читать расширения из файла gpx с помощью ElementTree и добавлять их к объекту gpx с помощью gpxpy.

При использовании gpxpy.to_xml() вывод печатается правильно, но без расширений.

Пример:

Источник:

import xml.etree.ElementTree 
import gpxpy.gpx 

f = xml.etree.ElementTree.parse('odraw.gpx') 
gpx = gpxpy.gpx.GPX() 
gpx.creator = "a" 
odpoint = f.find("{http://www.opencpn.org}path").find("{http://www.opencpn.org}ODPoint") 
w1 = gpxpy.gpx.GPXWaypoint() 
w1.latitude = odpoint.attrib.get('lat') 
w1.longitude = odpoint.attrib.get('lon') 
w1.extensions = {odpoint.find('{http://www.opencpn.org}guid')} 
w1.type = 'WPT' 
gpx.waypoints.append(w1) 
print(gpx.to_xml()) 

входного файла:

<?xml version="1.0"?> 
<OCPNDraw version="0.1" creator="OpenCPN" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:opencpn="http://www.opencpn.org"> 
<opencpn:path> 
    <opencpn:type>Boundary</opencpn:type> 
    <opencpn:ODPoint lat="47.0" lon="59.0"> 
     <opencpn:type>Boundary Point</opencpn:type> 
     <opencpn:guid>4fbfffff-806d-4317-b245-4e6e2d190000</opencpn:guid> 
    </opencpn:ODPoint> 
</opencpn:path> 
</OCPNDraw> 

Выход (который отсутствует расширение Guid):

<?xml version="1.0" encoding="UTF-8"?> 
<gpx xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd" version="1.0" creator="a"> 
    <wpt lat="47.0" lon="59.0"> 
     <type>WPT</type> 
    </wpt> 
</gpx> 

ответ

1

В GPX версии 1.0 нет extension. Вы должны сериализация в XML с:

gpx.to_xml(version="1.1") 

EDIT:

Проблема эта линия:

w1.extensions = {odpoint.find('{http://www.opencpn.org}guid')} 

атрибут extensions должен быть словарем. Вы определили его как набор.

+0

Когда я это сделал, я получил исключение, которое я не вижу в версии 1.0: AttributeError: объект 'set' не имеет атрибутов 'items' – CaptainNemo

+0

@CaptainNemo weird, можете ли вы открыть проблему и вставить трассировку стека на https: //github.com/tkrajina/gpxpy/issues ... Я посмотрю, смогу ли я решить проблему. – puzz

 Смежные вопросы

  • Нет связанных вопросов^_^