既存のXMLファイルにサブアイテムを追加しようとしています。要素を追加できますが、新しい行ではなく既存の要素行に追加されます。
toprettyxml()
関数を使ってみましたが、行間が2倍になります
これが読み取られているXMLです
<MainItem config="mainItem">
<DisplayName name="" />
<SubItems>
<SubItem path="path01" />
<SubItem path="path02" />
<SubItem path="path03" />
</SubItems>
</MainItem>
私の現在のコード
from xml.dom.minidom import *
dom = parse(r"path/myfile")
element = dom.createElement("SubItem")
element.appendChild(dom.createTextNode("NewPath03"))
cd = dom.getElementsByTagName("SubItem")[2]
cd.parentNode.insertBefore(element, cd)
これが結果です
<MainItem config="mainItem">
<DisplayName name=""/>
<SubItems>
<SubItem path="path01"/>
<SubItem path="path02"/>
<SubItem>NewPath03</SubItem><SubItem path="path03"/>
</SubItems>
</MainItem>
期待される結果
<MainItem config="mainItem">
<DisplayName name="" />
<SubItems>
<SubItem path="path01" />
<SubItem path="path02" />
<SubItem path="path03" />
<SubItem path="path04" />
</SubItems>
</MainItem>
kkawabatからのコメントと、この回答のプリティプリントレシピに触発されて、私は次のことを思いつきました。
from xml.dom.minidom import parse
dom = parse(r"/path/myfile")
element = dom.createElement("SubItem")
element.setAttribute('path', 'path04')
cd = dom.getElementsByTagName("SubItem")[2]
cd.parentNode.appendChild(element)
def pretty_print(dom):
return '\n'.join([line for line in dom.toprettyxml(indent=' '*4).split('\n') if line.strip()])
print(pretty_print(dom))
出力:
<?xml version="1.0" ?>
<MainItem config="mainItem">
<DisplayName name=""/>
<SubItems>
<SubItem path="path01"/>
<SubItem path="path02"/>
<SubItem path="path03"/>
<SubItem path="path04"/>
</SubItems>
</MainItem>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加