用python解析XML文件以发送电子邮件

用python解析XML文件以发送电子邮件,python,xml,xml-parsing,Python,Xml,Xml Parsing,我正在用python编写代码,不仅可以读取xml,还可以将解析结果作为电子邮件发送。现在,我在尝试读取xml格式的文件时遇到了问题。我制作了一个简单的python脚本,我认为它至少可以读取文件,然后我可以尝试在python中发送电子邮件,但是第4行出现了语法错误 root.tag“log” 无论如何,这是我到目前为止写的代码: import xml.etree.cElementTree as etree tree = etree.parse('C:/opidea.xml') response

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

root.tag“log”

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

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>

glv
2012-08-09T13:16:24.488462Z
/trunk/build.xml
错误编号:不适用
受影响的功能:不适用
概述:示例
我希望能够发送此xml文件的电子邮件。现在,我只是想让python代码读取xml文件。

response.find('log')
找不到任何内容,因为:

查找(self、path、名称空间=None)

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

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

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

我不确定原因,但是对
find
的所有其他调用也会返回
None
(您可以通过打印
response.find('date')
等来找到它)。使用时,您可以使用
xpath

author = response.xpath('//author')[0].text
msg = [i.text for i in response.xpath('//msg')]
在任何情况下,您使用
find
对于
msg
都是不正确的,因为
find
总是返回一个元素,而不是它们的列表。

response.find('log')
不会找到任何内容,因为:

查找(self、path、名称空间=None)

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

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

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

我不确定原因,但是对
find
的所有其他调用也会返回
None
(您可以通过打印
response.find('date')
等来找到它)。使用时,您可以使用
xpath

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

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

好的,我删除了响应。find('log')下一步是什么?我仍然收到语法错误。@Gilbert发布问题时,请提供完整的回溯。我用更多的建议更新了答案。好的,我删除了响应。查找('log')下一步是什么?我仍然收到语法错误。@Gilbert发布问题时,请提供完整的回溯。我用更多的建议更新了答案。