标签: elementtree

使用ElementTree保存XML文件

我正在尝试开发简单的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>
Run Code Online (Sandbox Code Playgroud)

代码段如下:

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 …
Run Code Online (Sandbox Code Playgroud)

python elementtree

42
推荐指数
2
解决办法
3万
查看次数

如何删除etree元素的属性?

我有一些属性的元素 - 我们如何删除特定etree元素的属性.

python xml lxml elementtree

37
推荐指数
3
解决办法
3万
查看次数

对大型XML文件使用Python Iterparse

我需要在Python中编写一个解析器,它可以在没有太多内存(仅2 GB)的计算机上处​​理一些非常大的文件(> 2 GB).我想在lxml中使用iterparse来做到这一点.

我的文件格式为:

<item>
  <title>Item 1</title>
  <desc>Description 1</desc>
</item>
<item>
  <title>Item 2</title>
  <desc>Description 2</desc>
</item>
Run Code Online (Sandbox Code Playgroud)

到目前为止我的解决方案是:

from lxml import etree

context = etree.iterparse( MYFILE, tag='item' )

for event, elem in context :
      print elem.xpath( 'description/text( )' )

del context
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个解决方案仍然占用了大量的内存.我认为问题在于,在处理每个"ITEM"后,我需要做一些事情来清理空的孩子.在处理我的数据到正确清理之后,有人可以提供一些建议吗?

python xml lxml elementtree large-files

36
推荐指数
2
解决办法
3万
查看次数

在ElementTree中使用XPath

我的XML文件如下所示:

<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2008-08-19">
  <Items>
    <Item>
      <ItemAttributes>
        <ListPrice>
          <Amount>2260</Amount>
        </ListPrice>
      </ItemAttributes>
      <Offers>
        <Offer>
          <OfferListing>
            <Price>
              <Amount>1853</Amount>
            </Price>
          </OfferListing>
        </Offer>
      </Offers>
    </Item>
  </Items>
</ItemSearchResponse>
Run Code Online (Sandbox Code Playgroud)

我想做的就是提取ListPrice.

这是我正在使用的代码:

>> from elementtree import ElementTree as ET
>> fp = open("output.xml","r")
>> element = ET.parse(fp).getroot()
>> e = element.findall('ItemSearchResponse/Items/Item/ItemAttributes/ListPrice/Amount')
>> for i in e:
>>    print i.text
>>
>> e
>>
Run Code Online (Sandbox Code Playgroud)

绝对没有输出.我也试过了

>> e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')
Run Code Online (Sandbox Code Playgroud)

没有不同.

我究竟做错了什么?

python xml xpath elementtree

35
推荐指数
4
解决办法
5万
查看次数

在Python中进行单元测试中的XML比较

我有一个可以从XML字符串构建自己的对象,并将自己写入XML字符串.我想编写一个单元测试来测试通过XML的循环跳过,但是我在比较两个XML版本时遇到了麻烦.空白和属性顺序似乎是问题.有关如何做到这一点的任何建议?这是在Python中,我正在使用ElementTree(这并不重要,因为我只是在这个级别处理字符串中的XML).

python xml elementtree

33
推荐指数
4
解决办法
1万
查看次数

如何使用Python ElementTree提取xml属性

对于:

<foo>
 <bar key="value">text</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我如何获得"价值"?

xml.findtext("./bar[@key]")
Run Code Online (Sandbox Code Playgroud)

引发错误.

python xml xpath elementtree

33
推荐指数
2
解决办法
7万
查看次数

在解析之前,如何检查XML中属性和标记的存在?

我正在python中通过Element Tree解析XML文件,并将内容写入cpp文件.

子标签的内容对于不同的标签将是不同的.例如,第一个事件标记将party标记作为子标记但第二个事件标记没有.

- >如何在解析之前检查标签是否存在?

- > Children在第一个事件标记中有value属性,但在第二个事件标记中没有.如何在获取属性之前检查属性是否存在.

- >目前我的代码为非现有的party标签抛出了一个错误,并为第二个children标签设置了"None"属性值.

<main>
  <event>
    <party>Big</party>
    <children type="me" value="3"/>
  </event>

  <event>
    <children type="me"/>
  </event>

</main>
Run Code Online (Sandbox Code Playgroud)

码:

import xml.etree.ElementTree as ET
tree = ET.parse('party.xml')
root = tree.getroot()
for event in root.findall('event'):
    parties = event.find('party').text
    children = event.get('value')
Run Code Online (Sandbox Code Playgroud)

我想检查标签然后取其值.

python xml parsing elementtree conditional-statements

31
推荐指数
1
解决办法
5万
查看次数

如何让Python的ElementTree打印到XML文件?

背景

我正在使用SQLite访问数据库并检索所需的信息.我在Python 2.6版中使用ElementTree来创建包含该信息的XML文件.

import sqlite3
import xml.etree.ElementTree as ET

# NOTE: Omitted code where I acccess the database,
# pull data, and add elements to the tree

tree = ET.ElementTree(root)

# Pretty printing to Python shell for testing purposes
from xml.dom import minidom
print minidom.parseString(ET.tostring(root)).toprettyxml(indent = "   ")

#######  Here lies my problem  #######
tree.write("New_Database.xml")
Run Code Online (Sandbox Code Playgroud)

尝试

我已经尝试使用tree.write("New_Database.xml", "utf-8")上面代码的最后一行,但它根本没有编辑XML的布局 - 它仍然是混乱的混乱.

我还决定摆弄并尝试做:而不是将其打印到Python shell,这给出了错误AttributeError:'unicode'对象没有属性'write'.
tree = minidom.parseString(ET.tostring(root)).toprettyxml(indent = " ")

问题

当我将我的树写到最后一行的XML文件时,是否有一种方法可以像在Python shell中那样打印到XML文件?

我可以toprettyxml()在这里使用,还是有不同的方法来做到这一点?

python xml pretty-print elementtree python-2.6

30
推荐指数
6
解决办法
5万
查看次数

使用Python中的ElementTree发出命名空间规范

我正在尝试使用包含XML声明和命名空间的元素树发出XML文件.这是我的示例代码:

from xml.etree import ElementTree as ET
ET.register_namespace('com',"http://www.company.com") #some name

# build a tree structure
root = ET.Element("STUFF")
body = ET.SubElement(root, "MORE_STUFF")
body.text = "STUFF EVERYWHERE!"

# wrap it in an ElementTree instance, and save as XML
tree = ET.ElementTree(root)

tree.write("page.xml",
           xml_declaration=True,
           method="xml" )
Run Code Online (Sandbox Code Playgroud)

但是,<?xml标签既没有出现也没有任何名称空间/前缀信息.我在这里有点困惑.

python xml elementtree

29
推荐指数
2
解决办法
3万
查看次数

XML解析:元素树(etree)与minidom

我多年来一直使用minidom来解析XML.现在我突然了解了Element Tree.我的问题哪个解析更好?那是:

  • 哪个更快?
  • 哪个使用更少的内存?
  • 要么有任何O(n ^ 2)依赖关系我应该担心?
  • 是否有人为了另一个而贬值?

为什么我们有两个接口?

谢谢.

python elementtree minidom xml-parsing

29
推荐指数
2
解决办法
2万
查看次数