解决方法
我假设您的xml文件格式正确.而且我还假设与您的示例相反,您的“真实”数据比每行一个标记稍微复杂一些(除了根目录之外).否则,我们是否同意删除包含给定标记的行很简单?
(defun my-remove-tag (tag) (save-excursion (let ((case-fold-search nil)) (while (search-forward-regexp (concat "<" tag "[^\\>]*>")) (delete-region (match-beginning 0) (search-forward (concat "</" tag ">")))))))
调用此函数可以查找nmo,blue或qwerty标记,如下所示:
(my-remove-tag "nmo") (my-remove-tag "qwerty")
理由是寻找一个开始标记然后寻找结束标记,并删除中间的所有内容.标记的属性可以在中间,并且此函数处理包含属性的开始标记.
完成功能后,将禁用并恢复区分大小写.此外,Emacs Point还使用通常的宏恢复:save-excusion.
更新
我删除了外部让.无需手动恢复case-fold-search值,let绑定只会影响全局值,它通过“unhadowing”恢复.