0

et.parse を使用して解析する XML ファイルにコードがあります。

<VIAFCluster xmlns="http://viaf.org/viaf/terms#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:void="http://rdfs.org/ns/void#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
<viafID>15</viafID>
<nameType>Personal</nameType>
</VIAFCluster>
<mainHeadings>
    <data>
       <text>
          Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
       </text>
    </data>
</mainHeadings>

そして、私はそれを次のように解析したい:

[15、「個人」、「ゴンドリン等」]

次の文字列情報を印刷できないようです。

import xml.etree.ElementTree as ET

tree = ET.parse('/Users/user/Documents/work/oneline.xml')
root = tree.getroot()

for node in tree.iter():
    name = node.find('nameType')
    print(name)

「なし」と表示されます...何が間違っていますか?

4

1 に答える 1

1

あなたが何をしたいのかはまだ正確にはわかりませんが、うまくいけば、以下のコードを実行すると、うまくいくでしょう。getiterator 関数を使用して要素を繰り返し処理すると、何が起こっているかがわかります。あなたがそれらに来るようにあなたが欲しいものを拾うことができます:

import xml.etree.ElementTree as et
xml = '''
<VIAFCluster xmlns="http://viaf.org/viaf/terms#" 
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
             xmlns:void="http://rdfs.org/ns/void#" 
             xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <viafID>15</viafID>
    <nameType>Personal</nameType>
    <mainHeadings>
        <data>
           <text>
              Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
           </text>
        </data>
    </mainHeadings>
</VIAFCluster>
'''
tree = et.fromstring(xml)
lst = []
for i in tree.getiterator():
    t = i.text.strip()
    if t:
        lst.append(t)
        print i.tag
        print t

必要に応じてリストが作成されます。トップレベルの要素が複数あったため、xml をクリーンアップする必要がありました。多分それはずっとあなたの問題でした。

がんばれ、マイク

于 2012-11-14T23:00:25.120 に答える