Tôi đang cố gắng phát triển mã Python đơn giản (3.2) để đọc các tệp XML, thực hiện một số chỉnh sửa và lưu trữ chúng trở lại. Tuy nhiên, trong bước lưu trữ, ElementTree bổ sung thêm danh pháp vùng tên. Ví dụ:Lưu tệp XML bằng ElementTree
<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>
Đoạn mã dưới:
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;
Tôi đã thử bằng cách sử dụng register_namespace
, nhưng không có kết quả dương tính. Có bất kỳ thay đổi cụ thể nào cho phiên bản ElementTree 1.3 này không?
Nói cho tôi biết nếu tôi hiểu bạn câu hỏi, bạn muốn có '' thay vì ' 'và như vậy? –
Chính xác. Tôi muốn có thay vì và v.v. –
ilya1725
Đây không phải là một giải pháp thực sự nhưng vì có vẻ như bạn tải một chuỗi, bạn đã cố gắng để loại bỏ không gian tên với một số regexp? Sau đó, nếu bạn tải và lưu mà không có mọi thứ sẽ ổn. –