python - 使用 ElementTree 保存 XML 文件

标签 python elementtree

我正在尝试开发简单的 Python (3.2) 代码来读取 XML 文件,进行一些 更正 并将它们存储回来。但是,在存储步骤中,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>

代码片段如下:

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 是否有任何特定更改?

最佳答案

为了避免 ns0 前缀,应该在读取 XML 数据之前设置默认命名空间

ET.register_namespace('', "http://www.topografix.com/GPX/1/1")
ET.register_namespace('', "http://www.topografix.com/GPX/1/0")

关于python - 使用 ElementTree 保存 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983041/

相关文章:

python - Pandas 将不规则的时间序列与不同的频率对齐

python - 如何在gae中传递/模拟admin_required装饰器?

python - 在 python 中使用 ElementTree 将 xml 元素作为第一个子元素插入

python - 如何使用Python的ElementTree获取child的子元素

python - 将随机森林预测作为列添加到测试文件中

Python BeautifulSoup 只是读取第一行

python - 如何使用 python pandas 在循环中加入多个数据帧

python etree 插入、追加和子元素

python - 如何收集同一元素级别的文本节点?

python - 在 Python ElementTree 中,如何判断元素是否为注释?