1

我目前正在完成一个程序,该程序应该解析一个 xml 文件,然后设置它,然后通过电子邮件发送它。我几乎完成了它,但我似乎被卡住了,可以使用一些帮助。我正在尝试从已完成的字典中获取路径属性“dir”和“file”,但出现错误。这是我目前正在处理的部分代码。

更新:我添加了字典,告诉我它是目录更改还是文件名更改旁边的列表

def formatChangesByAuthor(changesByAuthor): 
    content = ''
    for author, changes in sorted(changesByAuthor.iteritems()):
    authorName = get_author_name( author );
    content += '       ***** Changes By '+authorName+'*****\n\n'
    for change in changes:
        rawDate = change['date']
        dateRepresentation = rawDate.strftime("%m/%d/%Y %I:%M:%S %p")
        content += '           Date: '+ dateRepresentation+'\n\n'

        path_change = change['paths']
        path_attribute= change['Attribute_changes']

        finalizedPathInformation = []

        for single_change in path_change:
            for single_output in path_attribute:  
                finalizedPathInformation.append(single_output+single_change)

        content +="           " + str(finalizedPathInformation) + "\n"

我希望开始工作的是当路径中有多个路径时它会做

文件名:test.xml

目录位置:/Testforlder/

出于某种原因,它向我显示了一个内存错误。我想知道我是否可以更好地编写路径部分。这是我得到的错误。

    content +="           " + str(finalizedPathInformation) + "\n" MemoryError

如果有帮助,现在这里是 xml 文件的一部分。

<log>
<logentry
revision="33185">
<author>glv</author>
<date>2012-08-06T21:01:52.494219Z</date>
<paths>
<path
action="M"
kind="file">/trunk/build.xml</path>
<path
 kind="dir"
 action="M">/trunk</path>
 </paths>
 <msg>PATCH_BRANCH:N/A
 BUG_NUMBER:N/A
 FEATURE_AFFECTED:N/A
 OVERVIEW:N/A 
 Testing the system log.
 </msg>
 </log>

现在我将 nodeValue 保存在字典中,但由于某种原因,我无法获取 nodeValue 中的属性以查看它是否具有“dir”或“file”属性。我很确定我在某处做错了什么。任何建议或帮助将不胜感激和欢迎:)

4

1 回答 1

4

显然你path_change是一个列表。试试path_change[0].getAttribute('kind')

我还建议添加调试输出(print path_change在调用 getAttribute() 之前)以了解有关您的数据结构的更多信息。

当然,如果有一个列表,您可能想要处理列表中的所有元素,而不仅仅是第一个。一种方法可能是:

...
    for single_change in path_change:
        kind = str(single_change.getAttribute("kind"))
        if kind == 'dir':
            content += '            Directory Location: '
        elif kind == 'file':
            content += '            Filename:  '
        else:
            raise SomeException("kind is neither dir nor file", kind, single_change)
        content += (str(single_change).
                    replace("u'","       \n").
                    replace("[","").
                    replace("',","").
                    replace("']", "\n ") + "\n")
...
于 2012-09-12T13:58:20.603 回答