1

Element.find()Python のxml.etree.ElementTreeモジュールのメソッドを使用するコードを書いています。ただし、を使用し始めるとすぐに、Python は への呼び出しをではなくとしてstr.replace()解釈することがわかりました。object.find()str.find()Element.find()

XML ファイルのさまざまなオブジェクトからテキストを取得するコードが必要Elementであり、場合によっては、strメソッドを使用してそれを変更する必要があります。インタープリターの解釈方法を変更せずにこれを行うにはどうすればよいobject.find()ですか? ここに私のコード:

import xml.etree.ElementTree as xml
import re
import json

pattern = re.compile('[a-z,0-9,-]+')
c_pattern = re.compile('\[caption[^\]]+\]')
c2_pattern = re.compile('\[/caption\]')

tree = xml.parse('file.xml')
root = tree.getroot()

for item in root.iter('item'):
    if item.find('{http://wordpress.org/export/1.2/}post_type').text == 'post':
        t = item.find('{http://purl.org/rss/1.0/modules/content/}encoded').text
        print item.find
        try:
            t = t.encode('utf-8')

            o_cap = re.findall(c_pattern,t)
            e_cap = re.findall(c2_pattern,t)

            for item in o_cap:
                t = t.replace(item,'') 
            for item in e_cap:
                t = t.replace(item,'')           
        except:
            t = 'None'
        print item.find
        title = item.find('title').text

最初のprintステートメントは を返しますが<bound method Element.find of <Element 'item' at 0x2a7a7d0>>、2 番目のステートメントは を返します<built-in method find of str object at 0x2b56e00>

サブクラス化を試みましたが、XML ファイル内Elementのノードを新しいサブクラスのオブジェクトにする方法がわかりません。Elementまた、メソッドを参照する新しいメソッドを単純に定義しようとしましたが、それを使用しようとすると、インタープリターは、オブジェクトにユーザー定義の名前のメソッドがないことElement.find()を教えてくれました。Element

私が考えた別の方法は、ある種の

from xml.etree.ElementTree import Element.find() as Element.some_other_name() 

しかし、それは機能しません (構文のバリエーションをたくさん試しましたが、どちらも機能しません)。この問題を回避するために私ができる/すべきことを誰かが知っていますか?

4

2 に答える 2

5

あなたは名前を壊していますitem。内側のループの変数名を のように別のものに切り替えてみてくださいpoop

for poop in o_cap:  
    t = t.replace(poop,'') 
for poop in e_cap:
    t = alvin.replace(poop,'')  
于 2012-09-17T04:46:45.710 に答える
2

コードがなければ、私は推測することしかできません。

呼び出されるメソッドは、常に参照しているオブジェクトから取得されます。実行する場合Element.find()は、Elementオブジェクトが必要です。代わりに、strからのオブジェクトがありますreplace()

Element1 つの方法は、 の内容を結果に置き換えてreplace()から、元のものであるかのように作業することです。

于 2012-09-17T04:29:40.787 に答える