Speichern von XML-Dateien mit ElementTree

Ich versuche zu entwickeln, die einfache Python (3.2) code: Lesen von XML-Dateien, einige Korrekturen und speichern Sie Sie zurück. Jedoch während der Lagerung Schritt ElementTree bietet dieses namespace-Nomenklatur. Zum Beispiel:

<ns0:trk>
  <ns0:name>ACTIVE LOG</ns0:name>
<ns0:trkseg>
<ns0:trkpt lat="38.5" lon="-120.2">
  <ns0:ele>6.385864</ns0:ele>
  <ns0:time>2011-12-10T17:46:30Z</ns0:time>
</ns0:trkpt>
<ns0:trkpt lat="40.7" lon="-120.95">
  <ns0:ele>5.905273</ns0:ele>
  <ns0:time>2011-12-10T17:46:51Z</ns0:time>
</ns0:trkpt>
<ns0:trkpt lat="43.252" lon="-126.453">
  <ns0:ele>7.347168</ns0:ele>
  <ns0:time>2011-12-10T17:52:28Z</ns0:time>
</ns0:trkpt>
</ns0:trkseg>
</ns0:trk>

Das code-snippet unten:

def parse_gpx_data(gpxdata, tzname=None, npoints=None, filter_window=None,
                   output_file_name=None):
        ET = load_xml_library();

    def find_trksegs_or_route(etree, ns):
        trksegs=etree.findall('.//'+ns+'trkseg')
        if trksegs:
            return trksegs, "trkpt"
        else: # try to display route if track is missing
            rte=etree.findall('.//'+ns+'rte')
            return rte, "rtept"

    # try GPX10 namespace first
    try:
        element = ET.XML(gpxdata)
    except ET.ParseError as v:
        row, column = v.position
        print ("error on row %d, column %d:%d" % row, column, v)

    print ("%s" % ET.tostring(element))
    trksegs,pttag=find_trksegs_or_route(element, GPX10)
    NS=GPX10
    if not trksegs: # try GPX11 namespace otherwise
        trksegs,pttag=find_trksegs_or_route(element, GPX11)
        NS=GPX11
    if not trksegs: # try without any namespace
        trksegs,pttag=find_trksegs_or_route(element, "")
        NS=""

    # Store the results if requested
    if output_file_name:
        ET.register_namespace('', GPX11)
        ET.register_namespace('', GPX10)
        ET.ElementTree(element).write(output_file_name, xml_declaration=True)

    return;

Habe ich versucht, mit der register_namespace haben, aber ohne positives Ergebnis.
Gibt es irgendwelche speziellen änderungen für diese version von ElementTree 1.3?

Kommentar zu dem Problem
Sagen Sie mir, wenn ich deine Frage verstanden, die Sie gerne zu haben <trk> statt <ns0:trk>, und so weiter? Kommentarautor: Rik Poggi
Richtig. Möchte ich haben <trk> statt <ns0:trk - > und so weiter. Kommentarautor: ilya1725
Dies ist keine echte Lösung, aber da es scheint, dass Sie laden eine Zeichenfolge, haben Sie versucht, entfernen Sie den namespace mit einigen regexp? Nach, dass, wenn Sie laden und speichern, ohne alles sollte ok sein. Kommentarautor: Rik Poggi
Hi Rik. Ich werde es tun, alles andere schlägt fehl. Ich würde gerne konfigurieren ElementTree nicht drucken, es in den ersten Platz. Kommentarautor: ilya1725

InformationsquelleAutor der Frage ilya1725 | 2012-01-24

Schreibe einen Kommentar