sudsライブラリを使用して、Python 2.6 で SOAP Web サービスを実装しようとしています。これはうまく機能していますが、出力をlxmlで解析しようとすると問題が発生しました。
Suds はsuds.sax.text.Text
、SOAP サービスからの応答でオブジェクトを返します。このsuds.sax.text.Text
クラスは、Python 組み込みUnicode クラスのサブクラスです。本質的に、これは次の Python ステートメントに匹敵します。
u'<?xml version="1.0" encoding="utf-8" ?><root><lotsofelements \></root>'
XML 宣言が正しい場合、コンテンツは UTF-8 でエンコードされているため、Python Unicode オブジェクトではないため、これは矛盾しています (UCS4 などの内部エンコーディングで格納されているため)。
lxml は、文書化されているように、これを解析することを拒否します。これは、どのエンコーディングとして解釈すべきかについて明確な答えがないためです。
私が見ているように、この束縛から抜け出す方法は 2 つあります。
- エンコーディング
<?xml>
を含む宣言を取り除きます。 - 指定されたエンコーディングを使用して、Suds からの出力をバイト文字列に変換します。
現在、Web サービスから受信しているデータは ASCII の範囲内にあるため、どちらの方法でも機能しますが、どちらも私には醜いハッキングのように感じられます。より広い範囲の Unicode 文字を必要とするデータを受信します。
良いアイデアはありますか?私がこの立場にいる最初の人だとは想像できません…</p>