1

我正在用 python 编写代码,它不仅可以读取 xml,还可以将解析结果作为电子邮件发送。现在我在尝试读取 xml 中的文件时遇到了麻烦。我制作了一个简单的 python 脚本,我认为它至少可以读取文件,然后我可以尝试在 python 中发送电子邮件,但我在第 4 行收到语法错误。

root.tag '日志'

无论如何,这是我到目前为止编写的代码:

import xml.etree.cElementTree as etree

tree = etree.parse('C:/opidea.xml')
response = tree.getroot()
log = response.find('log').text
logentry = response.find('logentry').text
author = response.find('author').text
date = response.find('date').text
msg = [i.text for i in response.find('msg')]

现在xml文件有这种格式

  <log>
<logentry
   revision="12345">
<author>glv</author>
<date>2012-08-09T13:16:24.488462Z</date>
<paths>
<path
   action="M"
  kind="file">/trunk/build.xml</path>
</paths>
 <msg>BUG_NUMBER:N/A
FEATURE_AFFECTED:N/A
   OVERVIEW:Example</msg>
</logentry>
</log>

我希望能够发送此 xml 文件的电子邮件。现在虽然我只是想让 python 代码读取 xml 文件。

4

1 回答 1

1

response.find('log')什么也找不到,因为:

查找(自我,路径,命名空间=无)

按标签名称或路径查找第一个匹配的子元素。

在您的情况下log,不是子元素,而是根元素本身。不过,您可以直接获取其文本:response.text. 但是在您的示例log中,无论如何,元素中都没有任何文本。

编辑:抱歉,文档中的引用实际上适用于lxml.etree文档,而不是xml.etree.

我不确定原因,但所有其他调用find也返回None(您可以通过打印response.find('date')等方式找到它)。使用lxmlou 可以xpath改用:

author = response.xpath('//author')[0].text
msg = [i.text for i in response.xpath('//msg')]

在任何情况下,您对 的使用find都不正确msg,因为find总是返回单个元素,而不是它们的列表。

于 2012-08-21T17:06:39.480 回答