如何替换特定XML节点中的换行符?
例如,^J
中的<br/>
到<content:encoded></content:encoded>
代码示例:
<content:encoded><![CDATA[
Communities across the Northwest Territories have harvested a bumper crop
of produce ranging from potatoes and carrots to spinach and lettuce thanks to
dedicated community gardeners and the Government of the Northwest Territories’ (GNWT).
]></content:encoded>
答案 0 :(得分:1)
如果只有一个这样的范围,以下将会这样做:
/<content:encoded>/,/<\/content:encoded>/s#$#<br/>#
这会在(打开/关闭)标记分隔的范围内执行:substitute
命令。示例添加 <br/>
代码,如果您想将所有内容压缩为一行,请搜索\n
而不是$
(\n\s*
删除缩进)。
如果要替换多个此类标记,请在命令前加:global
。这将执行替换(此时间从包含开始标记的当前行到下一个结束标记),用于缓冲区中找到的所有标记(您可以通过预先设置不同的范围来再次影响,例如{ {1}})。
答案 1 :(得分:0)
您可以使用宏:
qq
开始录制/content:encoded<cr>
转到下一个标记。注意<cr>
表示按Enter键。vit
直观地选择标记:'<,'>s/\n\s*/<br\/>/g
用<br/>
替换所有换行后跟任意数量的空格。请注意,'<,'>
将由vim自动添加。q
停止录制5@q
重复5次。它可能也可能使用正则表达式,但我的正则表达式不是那个。
答案 2 :(得分:0)
使用适当的XML处理工具。例如,xsh:
open file.xml ;
for my $text in //content:encoded/text() {
my $lines = xsh:split("\n", $text) ;
for $lines {
my $t := insert text (.) before $text ;
insert element br before $text ;
}
delete $text;
}
save :b ;
答案 3 :(得分:0)
我认为解决方案是直观地选择行,然后:s#\n#<br/>\r#g
- 它会将行结尾替换为<br/>
。
如果你想在每个内部标签中替换它,那么你应该使用:
:g /<content:encoded>/;/\/content:encoded/ s#\n#<br/>\r#g