xml – 删除emacs中特定类型的所有标记

前端之家收集整理的这篇文章主要介绍了xml – 删除emacs中特定类型的所有标记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 XML文件.只是阅读,我可以告诉你很兴奋.

现在我想要完全删除一些标签

<qwerty option=1>
<nmo>sdfsdf</nmo>
<blue>sdfsdf</blue>
</qwerty>

这是一个大文件.如何删除所有标签nmo和blue,包括内容?在Emacs中,或者我的mac可以使用的任何其他东西.

解决方法

我假设您的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”恢复.

猜你在找的XML相关文章