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()の呼び出しの前に)デバッグ出力を追加することを提案します。

もちろん、リストがある場合は、最初の要素だけでなく、リスト内のすべての要素を処理することもできます。これを行う1つの方法は次のとおりです。

...
    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 に答える