在Python ElementT中动态添加/删除注释

2024-09-30 08:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了一点时间研究这件事,结果一片空白。在

我对Python完全陌生,我正在尝试逐步检查我的xml文件,本质上,如果某个元素不是活动的,则注释掉某个特定的元素,如果是活动的,则再次取消注释。检查活跃与否是很好的,只是随后的评论我被击中的墙壁。我使用的是python2.7

我的结构相当简单:

<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="a" content="some stuff" />
    <meta name="b" content="things and stuff" />
    <meta name="c" content="rubbish stuff" />
    <groupStuff id="foo">
      <meta name="thing" content="wibble" />
    </groupStuff>
    <groupStuff id="bar">
      <meta name="thing" content="bibble" />
    </groupStuff>
  </head>
  <body>
  </body>
</smil>

所以如果是非活动的注释节点,那么如果是活动的,则返回。在

我以为这会是相当直截了当的,可能是,但我完全卡住了


Tags: 文件nameid元素时间bodyxmlcontent
1条回答
网友
1楼 · 发布于 2024-09-30 08:29:35

从技术上讲,可以将元素替换为其字符串表示形式的注释节点:

#!/usr/bin/env python
import xml.etree.ElementTree as ET

root = ET.XML("""<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="a" content="some stuff" />
    <meta name="b" content="things and stuff" />
    <meta name="c" content="rubbish stuff" />
    <groupStuff id="foo">
      <meta name="thing" content="wibble" />
    </groupStuff>
    <groupStuff id="bar">
      <meta name="thing" content="bibble" />
    </groupStuff>
  </head>
  <body>
  </body>
</smil>""")

parent = root.findall(".//*[@name='a']/..")[0]
child = parent.findall(".//*[@name='a']")[0]

commented = ET.tostring(child)

parent.remove(child)
parent.append(ET.Comment(commented))

print ET.tostring(root)

如果顺序重要,可以使用insert,而不是{}。在

取消注释可能需要一些标记来区分禁用的元素和真正的注释。但基本上,您将把注释数据解析为它自己的元素,并以类似的方式将其替换到树中。在

相关问题 更多 >

    热门问题