2009-07-31 10 views
0

私のアプリケーションでは、4Suite.org XSLT libraryを使用してソースXMLの変換を実行しています。 raw_xmlstylesheetは自分のアプリケーションの別の場所で定義されているUnicodeソースのXSLT変換

from Ft.Xml.Xslt import Transform 
transformed_xml = Transform(raw_xml, stylesheet) 

:構文は次のようなものです。 raw_xmlは、codecsモジュールで開かれたファイルハンドルを読み取った結果のxmlになるので、raw_xmlはUnicodeになります。

問題は、Transform()関数がソースxml(私の例ではraw_xml)の値をasciiにする必要があるということです。それはpydocでそう言います。私のユニークなプログラムは、ユニコードを変換しようとすれば、それらの行に沿ったエラーで失敗します。

ユニコードソースに対してXSLT変換を実行できる別のアプローチがありますか、それとも別のPythonライブラリがありますか?あるいは、私はXSLT変換について何か誤解していますか?

答えて

2

Transform実際にはが必要です。 - エンコードされたPython strをサポートする必要があります。 Transform(raw_xml.encode('utf8'), stylesheet)に電話して(そしてUnicodeが必要な場合は、もちろん処理し終えたら、結果として得られるutf8でエンコードされた文字列をUnicodeにデコードしてください)どうしますか?

+0

これはトリックをしたようです。私は今テストしているが、それは有望なようだ。ありがとう! – Mike

2

もっと現代的で積極的に管理している方がよいでしょう。lxml

+0

私はlxmlを使うのが好きですが、私のアプリケーションはすでに100以上のサイトで配布されているので、xmlライブラリを交換する際に柔軟性があまりありません。それはできますが、私は今は避けようとしています。さて、もしこのコードを更新してリファクタリングすることができたら、おそらく、使いやすさとetreeとの互換性のためにlxmlに切り替えるでしょう。 – Mike