का उपयोग कर एक्सएमएल फाइलों को सहेजना मैं एक्सएमएल फाइलों को पढ़ने के लिए सरल पायथन (3.2) कोड विकसित करने की कोशिश कर रहा हूं, कुछ सुधार करें और उन्हें वापस स्टोर करें। हालांकि, स्टोरेज चरण के दौरान एलिमेंट ट्री इस नामस्थान नामकरण को जोड़ता है। उदाहरण के लिए:एलिमेंटट्री
<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>
कोड स्निपेट के नीचे है:
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;
मैं register_namespace
उपयोग करने की कोशिश की है, लेकिन कोई सकारात्मक परिणाम के साथ। क्या ElementTree 1.3 के इस संस्करण के लिए कोई विशिष्ट बदलाव हैं?
मुझे बताओ अगर मैं समझ अपने प्रश्न, आप ' 'के बजाय' 'चाहते हैं और इसी तरह? –
सही। मैं के बजाय रखना चाहता हूं और इसी तरह। –
ilya1725
यह वास्तविक समाधान नहीं है, लेकिन ऐसा लगता है कि आप एक स्ट्रिंग लोड करते हैं, क्या आपने कुछ regexp के साथ नेमस्पेस को हटाने का प्रयास किया है? उसके बाद यदि आप सबकुछ बिना लोड और सहेजते हैं तो ठीक होना चाहिए। –