当前位置: 首页 > 面试题库 >

使用ElementTree保存XML文件

池永长
2023-03-14
问题内容

我正在尝试开发简单的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")


 类似资料:
  • 问题内容: 我需要在xml的第三个块上合并两个xml文件。因此,文件A.xml和B.xml如下所示: A.xml B.xml 我需要合并“结果” 到目前为止,我所做的是: 如您所见,我将初始xml_element_tree分配给具有标题等的数据,然后使用“结果”扩展。但是,这给了我这个: 结果需要放在底部。任何帮助将不胜感激。 问题答案: 虽然这大部分是重复的,并且可以在这里找到答案,但我已经做到

  • 问题内容: 当前使用Python 2.4.3,并且不允许升级 我想更改一个或多个标记中给定属性的值,以及更新文件中的XML注释。 我设法创建了一个以XML文件作为参数的Python脚本,并且为每个指定的标签更改了一个属性,如下所示 一切都很好,属性“ initialState”已更新,除了我的原始XML也包含许多XML注释的事实,但它们早已消失了,这是不好的。 怀疑只能解析XML结构,但我认为XM

  • 我有一个包含数万个XML文件(小文件)的语料库,我正在尝试使用Python并提取其中一个XML标记中包含的文本,例如,body标记之间的所有内容,例如: 然后编写一个包含此字符串的文本文档,然后向下移动XML文件列表。 我正在使用effbot的ELementTree,但找不到正确的命令/语法来做到这一点。我找到了一个使用迷你DOM的dom.getElementsByTagName的网站,但我不确定

  • 本文向大家介绍Python中使用ElementTree解析XML示例,包括了Python中使用ElementTree解析XML示例的使用技巧和注意事项,需要的朋友参考一下 【XML基本概念介绍】 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据。 概念一: 概念二: 概念三: 概念四: 概念五: 概念六: 【XML几种解析方法】

  • 问题内容: 我正在寻找使用ElementTree的XML到字典解析器的工具,我已经找到了一些,但是它们不包括属性,在我的情况下,我有很多属性。 问题答案: 称为 只要您实际上没有属性,它就可以工作;如果您这样做,则更改函数正文中的第三行以使用其他键。此外,您不能与此一起处理混合内容。 (在LXML上测试。)

  • 问题内容: 我很难找到一个很好的基本示例,说明如何使用元素树在python中解析XML。据我所知,这似乎是用于解析XML的最简单的库。这是我正在使用的XML的示例: 我可以使用硬编码的方法来做我需要的事情。但是我需要我的代码更具动态性。这是起作用的: 这是我尝试过的几件事,但都没有奏效,报告他们找不到timeSeries(或我尝试过的其他任何东西): 基本上,我想加载xml文件,搜索timeSer