dictにxmlファイルを追加しようとしています。今私がしたいのは、値を失うことなく、値をdictに更新することです。この理由は、xmlファイルをグループ化して、タグの作成者によって行われたすべての変更を表示したいためです。
これがxmlファイルのサンプルです。
<log>
<logentry
revision="33185">
<author>glv</author>
<date>2012-08-06T21:01:52.494219Z</date>
<paths>
<path
kind="file"
action="M">/branches/Patch_4_2_0_Branch/text.xml</path>
<path
kind="dir"
action="M">/branches/Patch_4_2_0_Branch</path>
</paths>
<msg>PATCH_BRANCH:N/A
BUG_NUMBER:N/A
FEATURE_AFFECTED:N/A
OVERVIEW:N/A
Adding the SVN log size requirement to the branch
</msg>
</logentry>
....
</log>
これが私がPythonで書いたコードです。
from xml.dom import minidom
import smtplib
from email.mime.text import MIMEText
from datetime import datetime
def xml_data ():
f = open('C:\opidea_2.xml', 'r')
data = f.read()
f.close()
dom = minidom.parseString(data)
ic = (dom.getElementsByTagName('logentry'))
dom = None
content = ''
author = {}
for num in ic:
authors = num.getElementsByTagName('author')
if len(authors) > 0:
name = authors[0].firstChild.nodeValue
author.update({'author': str(name)})
datef = []
xmlDate = num.getElementsByTagName('date')[0].firstChild.nodeValue
datef = [Good_Time]
path_change = []
paths = [x for x in num.getElementsByTagName("paths")[0].childNodes if isinstance(x, minidom.Element)]
for path in paths:
x = path.childNodes[0].nodeValue
if str(path.getAttribute("kind")) == 'dir':
path_change ='Directory location: ' + [str(x)]
else:
path_change ='Filename: ' + [str(x)]
xmlMsgf = []
xmlMsg = num.getElementsByTagName('msg')
if xmlMsg !='' and len(xmlMsg) > 0:
xmlMsgc = xmlMsg[0].firstChild.nodeValue
xmlMsgf = [xmlMsgc]
else:
xmlMsgc = "No comment made."
xmlMsgf = [xmlMsgc]
authorentry.push{('author',authorA),('date',datef),('path',path_change),('path',xmlMsgf))}
for k, v in [(authorentry)]:
try:
author[k].append(v)
except KeyError:
author[k] = [v]
author.update({'Date':datef,'Path':path_change,'msg':str(xmlMsgf)})
print author
if __name__ == "__main__":
xml_data ()
さて、私が望む最終結果は次のようになります
キー1=glv、date1、path 1a path 1b、msg1、date2、path 2、msg 2、..。
キー2=jsm、date1、path 1、msg1。
author.update({'Date':datef、'Path':path_change、'msg':str(xmlMsgf)})をグループ化して、作成者によるxmlファイルを一覧表示し、作成者が作成した次のセットを追加します。 。どうすればいいのかよくわかりません。どんな助けでもいただければ幸いです。これが私の更新されたコードですが、無効な構文エラーが発生するようです。
line 151
authorentry.push{('author',authorA),('date',datef),('path',path_change),('path',xmlMsgf))}
^
SyntaxError: invalid syntax