Python 注释掉xml元素并取消注释

Python 注释掉xml元素并取消注释,python,xml,comments,elementtree,Python,Xml,Comments,Elementtree,我有一个xml文件,我想取消注释并注释掉文件中的一个元素 <my_element> <blablabla href="docs/MyBlank.htm" /> </my_element> 这一次我想“结束”(评论)如下: <!-- <my_element> <blablabla href="docs/MyBlank.htm" /> </my_element> --> <!-- <

我有一个xml文件,我想取消注释并注释掉文件中的一个元素

<my_element>
    <blablabla href="docs/MyBlank.htm" />
</my_element>

这一次我想“结束”(评论)如下:

<!--
<my_element>
    <blablabla href="docs/MyBlank.htm" />
</my_element>
-->
<!--
<my_element>
    <blablabla href="secretwebhacking/MySecrectBankLogin.htm" />
</my_element>
-->

在文件中,我有一个同名元素,它是“closed”(注释掉)的,如下所示:

<!--
<my_element>
    <blablabla href="docs/MyBlank.htm" />
</my_element>
-->
<!--
<my_element>
    <blablabla href="secretwebhacking/MySecrectBankLogin.htm" />
</my_element>
-->

我想像这样“打开”它(取消注释):



为此,我使用ElementTree,我知道如何编辑元素中的值和属性,但我根本不知道如何删除和添加一个特定元素周围的

您可以使用
BeautifulSoup
进行解析。基本示例:

xmlbody = '<stuff>\
<my_element>\
    <blablabla href="docs/MyBlank.htm" />\
</my_element>\
<!--\
<my_element>\
    <blablabla href="secretwebhacking/MySecrectBankLogin.htm" />\
</my_element>\
-->\
</stuff>'

from bs4 import BeautifulSoup, Comment
soup = BeautifulSoup(xmlbody, "lxml")

# Find all comments
comments = soup.findAll(text=lambda text:isinstance(text, Comment))
for comment in comments:
  # Create new soup object from comment contents
  commentsoup = BeautifulSoup(comment, "lxml")
  # Find the tag we want
  blatag = commentsoup.find('blablabla')
  # Check if it is the one we need
  if(blatag['href']=="secretwebhacking/MySecrectBankLogin.htm"):
    # If so, insert the element within the comment into the document
    comment.insert_after(commentsoup.find('body').find('my_element'))
    # And remove the comment
    comment.extract()

# Find all my_elements
my_elements = soup.findAll('my_element')
for tag in my_elements:
  # Check if it's the one we want
  if(tag.find('blablabla')['href'] == "docs/MyBlank.htm"):
    # If so, insert a commented version
    tagcomment = soup.new_string(str(tag), Comment)
    tag.insert_after(tagcomment)
    # And remove the tag
    tag.extract()

print(soup.find('html').find('body').prettify().replace("<body>\n","").replace("\n</body>",""))
xmlbody=”\
\
\
\
\
'
从bs4导入BeautifulSoup,评论
汤=美汤(xmlbody,“lxml”)
#查找所有评论
comments=soup.findAll(text=lambda text:isinstance(text,Comment))
评论中的评论:
#从注释内容创建新的soup对象
commentsoup=BeautifulSoup(注释,“lxml”)
#找到我们想要的标签
blatag=commentsoup.find('blablabla')
#检查它是否是我们需要的
如果(blatag['href']==“secretwebhacking/mysecretbanklogin.htm”):
#如果是,请将注释中的元素插入文档中
comment.insert_在(commentsoup.find('body').find('my_元素'))之后
#并删除评论
comment.extract()
#找到我的所有元素
my_元素=soup.findAll('my_元素')
对于my_元素中的标记:
#看看是不是我们想要的
如果(tag.find('blablabla')['href']==“docs/MyBlank.htm”):
#如果是,请插入注释版本
tagcomment=soup.new_字符串(str(tag),Comment)
标记。在(标记注释)后插入
#然后取下标签
tag.extract()
打印(soup.find('html').find('body').prettify().replace(“\n”,”).replace(“\n”,”))
这应该是你的出发点,你可以根据需要把它复杂化。输出如下:

  <stuff>
   <!--<my_element> <blablabla href="docs/MyBlank.htm"></blablabla></my_element>-->
   <my_element>
    <blablabla href="secretwebhacking/MySecrectBankLogin.htm">
    </blablabla>
   </my_element>
  </stuff>


我尝试过,但我找到了另一种解决问题的方法。我刚刚用我想要的地址更新了元素。而不是删除和添加。谢谢马可的帮助,没问题!但是,如果它回答了您的问题,即使您最终没有使用它,也请接受答案。:)