0

Python 2.6 では、名前空間のプレフィックスを抑制する必要があります。ここに投稿されたソリューションを使用しましたが、動作しますが、解析を高速化するために代わりに cElementTree を使用すると、機能しなくなります。私のログから:

25/09/2013 20:04:05 'module' object has no attribute '_namespace_map'

2 つの実装の間に根本的な違いはありますか? 別の回避策はありますか?私が持っているモジュールのバージョン:

>>> import xml.etree.ElementTree as et
>>> et.VERSION
'1.2.6'
>>> import xml.etree.cElementTree as cet
>>> cet.VERSION
'1.0.6'
>>> 

ありがとう!

4

1 に答える 1

1

これが機能すると期待する理由はありません。jterrace は ElementTree の内部を掘り下げ、それらの内部に直接作用するハックなワークラウンドを思い付きました。内部が異なる別の実装でそれを使用しようとしているので、もちろんうまくいきません。


しかし... cElementTree のソースを見ると、名前空間の登録を処理する方法が...名前空間レジストリをインポートElementTreeして使用するPythonコードを実行することであることがわかります。したがって、これの代わりに:

import xml.etree.cElementTree as etree

# ...

if namespace_uri not in etree._namespace_map:

ElementTree両方をインポートしてから、の代わりにアクセスできる場合がありcElementTreeます。例えば:

import xml.etree.cElementTree as etree
import xml.etree.ElementTree

# ...

if namespace_uri not in ElementTree._namespace_map:

(明らかに、それに対する他の参照についても同じことを行います。)

これが機能する保証はありません。このエラーを回避できますが、コードを読んで、置き換えfixtagが cElementTree に同じ効果をもたらすかどうか、または他に何かしなければならないことがあるかどうかを確認する必要があります。

于 2013-09-25T18:46:56.213 に答える