2009-08-08 14 views
2

cElementTreeライブラリを使用してPythonでXMLファイルを解析しています。 すべて正常に動作していますcElementTreeを使用してPythonでXMLファイルを解析する:ファイル内のエラーと行番号を処理する

XMLの値が正しくないときにユーザーに完全なエラーメッセージを提供したいと思います。

<A name="xxxx" href="yyyy"/> 

をしてhref属性が存在しないか、与えられたリストにない値を持っていない場合、ユーザーに伝えたい:

たとえば、のは、私は、次のXMLがあるとしましょう。

瞬間のために、私は私の例外がどこかに引っ掛かって

if elem.get("ref") not in myList: 
    raise XMLException(elem, "the 'href' attribute is not valid or does not exist") 

のようなものを持っています。

さらに、XML要素の行番号をファイルに表示したいとします。それを行うことが可能である同等のXMLライブラリがあり :

質問:-(... cElementTreeは木のXML要素の行番号に関する情報を格納していないようです? XMLファイル内のXML要素の位置へのアクセス権を持っているか、方法はありますか?

あなたが使用する必要がありますおかげ

答えて

4

同等のライブラリがlxmlです。lxmlのは、非常に高速なCライブラリののlibxml2とlibxsltの上のラッパーです一般的に内蔵のものよりも優れていると考えられている。

幸いにも、要素木apiに保持し、lxml.etreeでそれを拡張しようとします。

lxml.etreeには、あなたの後ろにあるすべての要素の属性sourcelineがあります。

したがって、上記のエラーメッセージのelem.sourcelineが機能するはずです。

+0

ありがとうございました。 lxmlはうまく動作し、要素にはsourceline属性があります。 私の古いマシンでは、lxmlはcElementTreeと比べて比較的遅いです(入力ファイルによっては25%から50%遅くなります) – ThibThib

+0

http://codespeak.net/lxml/performance.html。読み込み、解析、cElementTreeでは遅くなりますが、ツリーのトラバーサルとシリアライゼーションは速くなります。 –

+0

sourcelineは、巨大なファイルのエラー処理に大きな追加です!ありがとう:) –

関連する問題