1. ホーム
  2. python

[解決済み] PythonのElementTreeを文字列に変換する

2023-01-01 22:09:27

質問

私が ElementTree.tostring(e) を呼び出すと、次のようなエラーメッセージが表示されます。

AttributeError: 'Element' object has no attribute 'getroot'

ElementTreeオブジェクトをXML文字列に変換する他の方法はないのでしょうか?

TraceBackです。

Traceback (most recent call last):
  File "Development/Python/REObjectSort/REObjectResolver.py", line 145, in <module>
    cm = integrateDataWithCsv(cm, csvm)
  File "Development/Python/REObjectSort/REObjectResolver.py", line 137, in integrateDataWithCsv
    xmlstr = ElementTree.tostring(et.getroot(),encoding='utf8',method='xml')
AttributeError: 'Element' object has no attribute 'getroot'

どのように解決するのですか?

Element オブジェクトには .getroot() メソッドがありません。その呼び出しを落とすと .tostring() の呼び出しは機能します。

xmlstr = ElementTree.tostring(et, encoding='utf8', method='xml')

を使うだけです。 .getroot() を使うだけです。 ElementTree インスタンス .

その他の注意事項です。

  • これは バイト列 であり、Python 3では bytes 型になります。

    を持たなければならない場合は str オブジェクトを持たなければならない場合、2つのオプションがあります。

    1. 結果のバイト値をUTF-8からデコードする。 xmlstr.decode("utf8")

    2. 使用方法 encoding='unicode' これはエンコード/デコードのサイクルを回避します。

      xmlstr = ElementTree.tostring(et, encoding='unicode', method='xml')
      
      
  • UTF-8 でエンコードされたバイト列の値が欲しい場合、あるいは Python 2 を使用している場合、ElementTree は以下のものを適切に検出できないことを考慮してください。 utf8 を標準的な XML エンコーディングとして適切に検出しないため、ElementTree は <?xml version='1.0' encoding='utf8'?> 宣言を追加します。使用方法 utf-8 または UTF-8 (ダッシュ)で囲んでください。を使う場合 encoding="unicode" を使用する場合、宣言ヘッダは追加されません。