Я пытаюсь программно комментировать / раскомментировать элемент XML (sub) из python. Например, я хочу закомментировать элемент с хостом '111.111.111.222'.
import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Comment, tostring
xml='''
<config>
<ui>...</ui>
<distributed overwrite-children="true">
<daemon host="111.111.111.111" port="8888">
<service-group name="standalone" />
</daemon>
<daemon host="111.111.111.222" port="8888">
<service-group name="standalone" />
</daemon>
<daemon host="111.111.111.333" port="8888">
<service-group name="standalone" />
</daemon>
</distributed>
</config>'''
try:
tree = ET.fromstring (xml)
root = tree.getroot()
except Exception as ex:
exit(ex)
element = root.find(".//distributed/daemon[@host='111.111.111.222']")
print (element)
comment_element = Comment(tostring(element))
root.insert(???, comment_element) # how to get element index to insert the commented node here?
root.remove(element) //throws error as element is not direct child of root?
print tostring(root)
Окончательный XML должен выглядеть примерно так (или аналогично):
<config>
<ui>...</ui>
<distributed overwrite-children="true">
<daemon host="111.111.111.111" port="8888">
<service-group name="standalone" />
</daemon>
<!--
<daemon host="111.111.111.222" port="8888">
<service-group name="standalone" />
</daemon>
-->
<daemon host="111.111.111.333" port="8888">
<service-group name="standalone" />
</daemon>
</distributed>
</config>
Кроме того, мне нужно иметь возможность раскомментировать конкретный элемент, если он уже закомментирован.
Я пытаюсь использовать библиотеку XML, но любой другой пример должен работать (например, BeautifulSoup).