非常に醜いxmlファイルを書き込むElementTreeを使用したpython xmlコードがあります。xml ファイルをもう少し読みやすくしたかったのです。しかし、ElementTree にはプリティプリント機能がありません。ドキュメンテーションでは、ElementTree は「インデント」メソッドを示しています。この indent メソッドを使用しようとすると、次のエラーが発生します。
Traceback (most recent call last):
File "/cygdrive/c/data/path/myFile.py", line 756, in <module>
main()
...
self.writeXML()
File "/cygdrive/c/data/path/myFile.py", line 248, in writeXML
self.indent(root)
File "/cygdrive/c/data/path/myFile.py", line 252, in indent
i = "\n" + level*" "
TypeError: object cannot be interpreted as an index
def writeXML(self):
root = self.myTree.getroot()
self.indent(root)
self.myTree.write(self.myXML)
def indent(elem, level=0):
i = "\n" + level*" " #Error Here!!
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
インデントの使い方が間違っていますか? または、このコードにエラーがありますか? より簡単なプリティプリントの推奨事項はありますか?
履歴: 以前は、プリティ プリントを持つ PyXML を使用していました。しかし、私がpython 2.6に行ったとき、PyXMLは死にました。lxml にはプリティプリントがありますが、私のシステムにはインストールされません。そこで、すべてのコードを ElementTree を使用するように変換しました。それが機能し、必要な基本機能のほとんどを備えていることがわかっているからです。