加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:21:49 所属栏目:百科 来源:网络整理
导读:我有一个 XML文件.只是阅读,我可以告诉你很兴奋. 现在我想要完全删除一些标签: qwerty option=1nmosdfsdf/nmobluesdfsdf/blue/qwerty 这是一个大文件.如何删除所有标签nmo和blue,包括其内容?在Emacs中,或者我的mac可以使用的任何其他东西. 解决方法 我假设
我有一个 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”恢复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读