Комментирование / раскомментирование XML-подэлемента в Python - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь программно комментировать / раскомментировать элемент 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...