1

これは、Python と XML ファイルからの情報取得の両方に対する私の最初の試みであるため、初心者向けの質問であることをお詫びします。

情報が次のように構成されている XML ファイルから著者名を抽出しようとしています。

<Author ValidYN="Y">
   <LastName>Duck</LastName>
    <ForeName>Donald</ForeName>
    <Initials>D</Initials>
</Author>

時々、次のようなエントリがあります。

<Author ValidYN="Y">
    <CollectiveName>Some Corp</CollectiveName>
</Author>

私が持っているコードは最初の例では問題なく動作しますが、2 番目の例では失敗し、AttributeError: 'NoneType' object has no attribute 'text'メッセージが表示されます。何が起こっているのかについての私の非常に基本的な理解では、何も見つからないという理由だけでエラーが発生していると思います。私が解決できないのは、2 番目の例を無視して次の作成者を探し続ける方法です。

コードは次のとおりです。

import xml.etree.ElementTree as etree

infile = r'C:\temp\test.xml'

authors = []
tree = etree.parse(infile)
root = tree.getroot()
for elem in tree.iter(tag='Author'):
    sn = elem.find('LastName').text
    fn = elem.find('Initials').text
    authors.append(fn + ' ' + sn)
for x in authors:
    print (x)

どんな助けもありがたく受け取った!

4

2 に答える 2

1
child = elem.find('LastName')
if child != None : sn = child.text

LastName要素がないノードでは、FindはNoneを返し、Noneにはテキストプロパティがありません。これがエラーの原因です。

于 2012-11-01T23:01:45.270 に答える
0

直面している問題を解決するためのコードは次のようになります。

    import xml.etree.ElementTree as etree

    infile = r'test.xml'

    authors = []
    tree = etree.parse(infile)
    root = tree.getroot()
    for elem in tree.iter(tag='Author'):
        snode = elem.find('LastName')
        if snode is not None:
            sn = snode.text
        fnode = elem.find('Initials')
        if fnode is not None:
            fn = fnode.text
        if (fnode is not None) and (snode is not None):
            authors.append(fn + ' ' + sn)
    for x in authors:
        print (x)
于 2013-01-25T02:50:39.180 に答える