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

使用ElementTree示例在Python中解析XML

杜辰龙
2023-03-14
问题内容

我很难找到一个很好的基本示例,说明如何使用元素树在python中解析XML。据我所知,这似乎是用于解析XML的最简单的库。这是我正在使用的XML的示例:

<timeSeriesResponse>
    <queryInfo>
        <locationParam>01474500</locationParam>
        <variableParam>99988</variableParam>
        <timeParam>
            <beginDateTime>2009-09-24T15:15:55.271</beginDateTime>
            <endDateTime>2009-11-23T15:15:55.271</endDateTime>
        </timeParam>
     </queryInfo>
     <timeSeries name="NWIS Time Series Instantaneous Values">
         <values count="2876">
            <value dateTime="2009-09-24T15:30:00.000-04:00" qualifiers="P">550</value>
            <value dateTime="2009-09-24T16:00:00.000-04:00" qualifiers="P">419</value>
            <value dateTime="2009-09-24T16:30:00.000-04:00" qualifiers="P">370</value>
            .....
         </values>
     </timeSeries>
</timeSeriesResponse>

我可以使用硬编码的方法来做我需要的事情。但是我需要我的代码更具动态性。这是起作用的:

tree = ET.parse(sample.xml)
doc = tree.getroot()

timeseries =  doc[1]
values = timeseries[2]

print child.attrib['dateTime'], child.text
#prints 2009-09-24T15:30:00.000-04:00, 550

这是我尝试过的几件事,但都没有奏效,报告他们找不到timeSeries(或我尝试过的其他任何东西):

tree = ET.parse(sample.xml)
tree.find('timeSeries')

tree = ET.parse(sample.xml)
doc = tree.getroot()
doc.find('timeSeries')

基本上,我想加载xml文件,搜索timeSeries标签,并遍历value标签,返回dateTime和标签本身的值;上面示例中我正在执行的所有操作,但不对我感兴趣的xml部分进行硬编码。有人可以给我指出一些示例,或者给我一些有关如何完成此操作的建议吗?

感谢您的所有帮助。使用以下两个建议对我提供的示例文件起作用,但是,它们对整个文件不起作用。这是我使用Ed Carrel的方法时从真实文件中得到的错误:

 (<type 'exceptions.AttributeError'>, AttributeError("'NoneType' object has no attribute 'attrib'",), <traceback object at 0x011EFB70>)

我发现实际文件中有不想要的东西,所以我逐步删除了一些东西,直到它起作用为止。这是我更改的行:

originally: <timeSeriesResponse xsi:schemaLocation="a URL I removed" xmlns="a URL I removed" xmlns:xsi="a URL I removed">
 changed to: <timeSeriesResponse>

 originally:  <sourceInfo xsi:type="SiteInfoType">
 changed to: <sourceInfo>

 originally: <geogLocation xsi:type="LatLonPointType" srs="EPSG:4326">
 changed to: <geogLocation>

删除具有“ xsi:…”的属性可解决此问题。’xsi:…’是无效的XML吗?对于我而言,以编程方式将其删除非常困难。有建议的解决方法吗?

这是完整的XML文件:http :
//www.sendspace.com/file/lofcpt

当我最初问这个问题时,我没有意识到XML中的名称空间。现在我知道发生了什么,我不必删除“
xsi”属性,它们是名称空间声明。我只是将它们包括在我的xpath搜索中。请参阅此页面上的LXML命名空间的更多信息。


问题答案:

因此,我现在在盒子上安装了ElementTree 1.2.6,并针对您发布的XML块运行了以下代码:

import elementtree.ElementTree as ET

tree = ET.parse("test.xml")
doc = tree.getroot()
thingy = doc.find('timeSeries')

print thingy.attrib

并得到以下回报:

{'name': 'NWIS Time Series Instantaneous Values'}

似乎已经找到了timeSeries元素,而无需使用数字索引。

现在有用的是知道您说“不起作用”时的意思。由于在给定相同输入的情况下对我有效,因此ElementTree不太可能以某种明显的方式损坏。使用任何错误消息,回溯或任何可提供的帮助我们的帮助来更新您的问题。



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

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

  • 问题内容: 我有以下要使用Python解析的: 我想找到所有标签,然后提取其中所有实例的值。我正在使用以下代码: 由于命名空间的原因,出现以下错误。 请让我知道如何更改代码以查找所有标签。 问题答案: ElementTree对名称空间不太聪明。你需要给的.find(),findall()和iterfind()方法的明确的命名空间字典。这没有很好的记录: 前缀仅在你传入的参数中查找。这意味着你可以使

  • 本文向大家介绍Python greenlet和gevent使用代码示例解析,包括了Python greenlet和gevent使用代码示例解析的使用技巧和注意事项,需要的朋友参考一下 greenlet示例 greenlet微线程,允许在线程中手动切换 示例1,线程切换 gr1和gr2是两个greenlet线程,使用gr1.switch(..)启动gr1,gr1执行test1,切换到gr2,gr2执

  • 问题内容: 我的XML文件如下所示: 我要做的就是提取ListPrice。 这是我正在使用的代码: 绝对没有输出。我也试过 没有不同。 我究竟做错了什么? 问题答案: 您有2个问题。 1)仅包含根元素,而不包含整个文档。它是Element类型而不是ElementTree类型。 2)如果将命名空间保留在XML中,则搜索字符串需要使用命名空间。 要解决问题1: 您需要更改: 至: 要解决问题2: 您可

  • 问题内容: 我一直在使用django和elementtree开发应用程序,并将其部署到生产服务器时发现它正在运行python 2.4。我已经能够捆绑elementtree但现在我得到了错误: 不幸的是,我无法升级python,因此即时通讯卡住了我得到的内容。如何使用SimpleXMLTreeBuilder作为解析器和/或需要重写代码? 问题答案: 如果你有想要使用ElementTree的第三方模块