首页 > 解决方案 > 在特定 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>

我尝试大量搜索类似的问题,但找不到。

标签: pythonxmlshell

解决方案


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>

推荐阅读