99

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

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

ElementTree オブジェクトを XML 文字列に変換する他の方法はありますか?

トレースバック:

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'
4

5 に答える 5

137

Elementオブジェクトには.getroot()メソッドがありません。その通話をドロップすると、.tostring()通話が機能します。

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

インスタンス.getroot()がある場合にのみ使用する必要があります。ElementTree

その他の注意事項:

  • これにより、Python 3 では型であるbytestringbytesが生成されます。
    オブジェクトが必要な場合はstr、次の 2 つのオプションがあります。

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

    2. 使用しencoding='unicode'ます。これにより、エンコード/デコードのサイクルが回避されます。

      xmlstr = ElementTree.tostring(et, encoding='unicode', method='xml')
      
  • utf8UTF-8 でエンコードされたバイト文字列値が必要な場合、または Python 2 を使用している場合は、ElementTree が標準の XML エンコーディングとして適切に検出されないことを考慮に入れて、<?xml version='1.0' encoding='utf8'?>宣言を追加します。これを防ぎたい場合は、utf-8または(ダッシュ付き) を使用します。UTF-8未使用時encoding="unicode"は宣言ヘッダーを追加します。

于 2013-03-08T22:22:40.203 に答える
0

私はPython 3.8で同じ問題を抱えていましたが、以前の回答はどれも解決しませんでした。問題は、ElementTree がモジュールとその中のクラスの両方の名前であることです。エイリアスを使用すると、次のことが明確になります。

from xml.etree.ElementTree import ElementTree
import xml.etree.ElementTree as XET
...
ElementTree.tostring(...)  # Attribute-error
XET.tostring(...)          # Works
于 2021-12-04T16:01:50.790 に答える