我花了一些时间来研究这个问题,然后我就空白了。
我是Python的新手,我正在尝试逐步浏览我的xml文件,基本上如果某些内容不活动,请注释掉一个特定的元素,如果有效则取消注释。检查是否有效是正常的,只是随后的评论进入或退出我已经碰壁了。我正在使用python 2.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>
因此,如果非活动注释掉节点,则如果激活则返回。
我认为这将是相当直接的,可能是但我完全被卡住了
答案 0 :(得分:0)
从技术上讲,您可以使用其字符串表示形式的注释节点替换元素:
#!/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
代替append
。
取消注释可能需要使用一些标记来区分禁用的元素和真正的注释。但基本上你要将评论数据解析为自己的元素,并以类似的方式将其替换为树。