1

私は、xmlを読み取るだけでなく、その解析の結果を電子メールとして送信できるPythonでコードを書いています。今、私は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')次の理由により、何も見つかりません。

find (自己、パス、名前空間 = なし)

タグ名またはパスによって、最初に一致するサブ要素を検索します。

あなたの場合log、サブ要素ではなく、ルート要素自体です。ただし、そのテキストを直接取得できますresponse.text。しかし、あなたの例では、log要素にはテキストが含まれていません。

編集: 申し訳ありませんが、ドキュメントからの引用は実際にはlxml.etreeドキュメントではなくドキュメントに適用されますxml.etree

理由はわかりませんが、他のすべての呼び出しfindも返さNoneれます (印刷などで確認できますresponse.find('date'))。代わりにlxml使用できます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 に答える