python - 在特定 XML 标记上方添加一行,在结束 XML 标记下方添加一行
问题描述
我有一个文件,内容如下:
<root>
<appender name="abc">
some lines
</appender>
<appender name="def">
some lines
</appender>
<appender name="qaz">
some lines
</appender>
</root>
我想在下面发表评论:
<!--
<appender name="def">
some lines
</appender>-->
所做的是
sed -i '/<appender name="def"/s/^/<--/;/<\/appender>/s/$/-->/' file.xml
这会添加在所有存在的行<!--
之上,<appender name="def">
但-->
会添加到所有行上</appender>
。我只想在第一次匹配完成后添加-->
which </appender>
get search。
输出应如下所示:
<root>
<appender name="abc">
some lines
</appender>
<!--
<appender name="def">
some lines
</appender>-->
<appender name="qaz">
some lines
</appender>
</root>
我尝试大量搜索类似的问题,但找不到。
解决方案
dibery 的答案看起来不错,但是由于您也标记了 python,因此我将提供一个简单的脚本来完成您的工作。
with open("file.xml", "r") as r:
lines = r.readlines()
gotcha = False # Just a flag to know if we catched the field
with open("file.xml", "w") as w:
for k in range(len(lines)):
if '<appender name="def">' in lines[k]:
w.write("<!--\n")
gotcha = True # We got it!
w.write(lines[k])
if '</appender>' in lines[k] and gotcha:
w.write('-->\n')
gotcha = False # We have done our job, this avoids commenting every other '</appender>' field
输出
<root>
<appender name="abc">
some lines
</appender>
<!--
<appender name="def">
some lines
</appender>
-->
<appender name="qaz">
some lines
</appender>
</root>
推荐阅读
- ruby-on-rails - 在渲染块内使用 content_for 传递 html
- docker - 从停止的 docker 容器中删除文件(不创建新图像)
- python - 如何从后台启动的python运行内置的shell命令?
- flutter - Flutter中什么时候需要类路径结构named-route(例如'/a/b/c')?
- jhipster - 如何去掉微服务前面的“服务”
- .htaccess - 如何使用 htaccess 重写子文件夹中文件的 URL
- python - IDLE shell 上下文文档损坏?
- android - 如何为片段设置观察者
- c++ - 如何检测类是否具有模板化成员函数?
- wordpress - 自定义 Typekit 字体到 Wordpress