2011-11-20 52 views
7

私は、各ファイルのいくつかの場所で名前空間を再定義するXMLデータを扱っています。私は、タグがXML内に存在するところでアクティブな名前空間に関係なく、特定のタイプのすべてのタグをドキュメントから取得しようとしています。Python EtreeでXMLを解析し、名前空間に関係なく指定されたタグを返す

私が探している要素を見つけるにはfindall('.//{namespace}Tag')を使用しています。しかし、{namespace}がファイル内の任意の時点で何をするのかわからないと、要求されたすべてのタグが返されるかどうかにかかわらず、ヒットしたり、逃したりします。

{namespace}に関係なく、すべてのタグ要素を返す方法はありますか? findall('.//{wildcard}Tag')の行に沿った何か?

+0

import io from lxml import etree xmlstring = '''<root xmlns:m="http://www.w3.org/html4/" xmlns:n="http://www.w3.org/html5/"> <m:table> <m:tr> <m:name>Sometext</m:name> </m:tr> </m:table> <n:table> <n:name>Othertext</n:name> </n:table> </root>''' root = etree.parse(io.StringIO(xmlstring)) names = root.xpath("//*[local-name() = 'name']") for name in names: print(name.text) 

あなたの質問はで前asweredされている場合があります。すでに問題を解決していれば、素晴らしいです!しかし、私たちの手に[Fermat thread](http://b.wardje.eu/2012/01/fermat-tread.html)を手に入れないように、ここにも投稿してください。そうでない場合は、問題のコードとXMLの例が便利です。 –

答えて

3

lxmlのxpath関数は、local-name()をサポートしています!ここで

は、Python 3の例である:この質問はここに、いくつかの時間が今ではいくつかの提案を答えを得ていなかったが与えられlxml etree xmlparser namespace problem

+0

これは何を出力しますか。それを実行しましたか?これが実際に動作するかどうかは不明です。 –

+0

は、私はこのエラーを取得する: ルート= etree.parse(io.StringIO(xmlstring)) TypeError例外で ファイルxml_test.py」、15行目、::トレースバック(最新の呼び出しの最後)initial_valueがUnicodeまたはNoneでなければなりません、 not str –

+0

実際の出力は "Sometext \ nOthertext \ n"です。 – phobie

関連する問題