1

不正な XML を解析する必要があります。

>>> from lxml import etree
>>> root = etree.fromstring(xml_string)
XMLSyntaxError: Namespace prefix xlink for href on email is not defined, line 3, column 2446

xlink宣言の中に実際にありません。

lxml欠落している名前空間を無視するか、指定された名前空間を使用するように指示する簡単で推奨される方法はありますか?

現在、xml_string解析前に名前空間を挿入するように手動で変更しています。これは機能しますが、見苦しく、一般的ではありません。

4

1 に答える 1

3

欠落している名前空間宣言を挿入するよう lxml に指示する方法はありません。と想像するかもしれません

etree.register_namespace("xlink", "http://www.w3.org/1999/xlink")

助けになるかもしれませんが、これは効果がありません。

「醜い」ものであっても、XML ドキュメントを解析する前に、自分で名前空間を注入し続ける必要があると思います (まだ行っていない場合は、おそらくこれを自動化できます)。

で初期化されたパーサー オブジェクトを使用して、lxml が不正な形式の入力を受け入れるようにすることrecover=Trueできます。例:

import lxml.etree as etree

INPUT = """\
<root>
 <x:a>ABC</x:a>
</root>""" 

parser = etree.XMLParser(recover=True)
tree = etree.fromstring(INPUT, parser)
print etree.tostring(tree)

出力:

<root>
 <a>ABC</a>
</root>

ここでは、プレフィックスが単に削除されていますが、それはあなたが望んでいるものではないと思います。名前空間には理由があります。それらはただ捨てることはできません。

于 2013-05-12T17:08:01.307 に答える