全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在Emacs中编辑和验证XML

Emacs通过xml-mode和nxml-mode提供良好XML编辑支持,含语法高亮、缩进、格式化、校验与补全;推荐启用nxml-mode,集成xmllint实现验证,并用sgml-pretty-print或xmllint --format美化代码。

Emacs 对 XML 编辑支持良好,配合内置和少量扩展即可实现语法高亮、缩进、格式化、校验与补全。关键在于合理配置 major mode 和验证工具链。

启用 xml-mode 并优化基础编辑体验

Emacs 自带 xml-mode,打开 .xml 文件会自动激活。它提供基本的标签匹配、缩进和括号高亮。可添加以下设置提升可用性:

  • 启用 electric-indent-mode(默认开启),让回车和 自动缩进
  • 开启 show-paren-mode,快速定位匹配的开始/结束标签
  • 添加 (setq xml-sexp-element-name-face 'font-lock-function-name-face) 让标签名更醒目
  • C-c C-oxml-toggle-xml-declaration)快速插入或删除 XML 声明

使用 nxml-mode 替代默认 xml-mode(推荐)

nxml-mode 是更现代、功能更强的 XML 模式(包含在 GNU Emacs 22+ 中),支持 RELAX NG 验证、结构导航和实时错误提示:

  • .emacsinit.el 中加入:
    (add-to-list 'auto-insert-alist '(xml . "XML skeleton"))
    (add-to-list 'auto-insert-alist '(nxml . "XML skeleton"))
  • .xml 关联到 nxml-mode
    (add-to-list 'auto-insert-alist '(xml . "XML skeleton"))
    (add-to-list 'auto-insert-alist '(nxml . "XML skeleton"))
    更稳妥的方式是:
    (add-to-list 'auto-insert-alist '(xml . "XML skeleton"))
    (add-to-list 'auto-insert-alist '(nxml . "XML skeleton"))
  • 启用后,用 C-c C-s 查看当前光标所在元素的完整路径,C-c C-r 重命名标签,C-c C-e 关闭当前标签

集成外部验证器(如 xmllint)进行语法与 DTD/XSD 校验

Emacs 本身不内建 XML Schema 验证,但可通过 flycheckcompile 调用 xmllint 实现即时校验:

  • 确保系统已安装 xmllint(libxml2-utils 包,Linux;macOS 可用 brew install libxml2
  • 安装 flycheck:用 package-install 安装,然后在配置中启用:
    (add-hook 'nxml-mode-hook 'flycheck-mode)
  • 配置 flycheck 使用 xmllint
    (flycheck-add-verifier 'xml-xmllint
    :command ("xmllint" "--noout" "--schema" source "source")
    :error-patterns ((error line-start (file-name) ":" line ":" column ": " (message) line-end)))

    然后设置:
    (flycheck-select-checker 'xml-xmllint)
  • 若无 DTD/XSD,仅检查 well-formedness,可用:
    xmllint --noout your-file.xml —— 错误会直接显示在 *Compile* 缓冲区

格式化与美化 XML(indent & pretty-print)

XML 手动排版易出错,推荐自动化处理:

  • nxml-mode 中,选中区域后执行 C-c C-rnxml-refine-region)可按模式规则重新缩进
  • 全局格式化:用 sgml-pretty-print(适用于 xml-modenxml-mode),对整个缓冲区重排版
  • 更可靠的方式是调用外部命令:
    M-! xmllint --format -,然后粘贴内容或标记区域后执行,输出即为美化结果
  • 可绑定快捷键:
    (define-key nxml-mode-map (kbd "C-c f") 'nxml-formatter)
    其中 nxml-formatter 是自定义函数,封装 xmllint --format 调用

不复杂但容易忽略:验证前确认文件编码为 UTF-8,且声明一致(如 ),否则 xmllint 可能报编码错误。


# linux  # 编码  # 工具  # mac  # macos  # cos  # print  # define  # 封装  # select  # format  # xml  # Error  # auto  # map  # function  # column  # emacs  # gnu  # 自动化  # 适用于  # 可用性  # 自定义  # 或删除  # 自带  # 可通过  # 更强  # 内建  # 可按  # 即为 


相关文章: 小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  网站设计制作企业有哪些,抖音官网主页怎么设置?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  高端云建站费用究竟需要多少预算?  建站之星收费标准详解:套餐费用及年费价格表一览  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在阿里云高效完成企业建站全流程?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  建站之星云端配置指南:模板选择与SEO优化一键生成  如何基于云服务器快速搭建网站及云盘系统?  Python lxml的etree和ElementTree有什么区别  安徽网站建设与外贸建站服务专业定制方案  如何获取PHP WAP自助建站系统源码?  建站之星3.0如何解决常见操作问题?  如何高效利用200m空间完成建站?  如何快速搭建高效香港服务器网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何在景安云服务器上绑定域名并配置虚拟主机?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  广东企业建站网站优化与SEO营销核心策略指南  如何在西部数码注册域名并快速搭建网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  C++中引用和指针有什么区别?(代码说明)  黑客如何利用漏洞与弱口令入侵网站服务器?  已有域名和空间如何搭建网站?  定制建站是什么?如何实现个性化需求?  如何通过云梦建站系统实现SEO快速优化?  建站之星如何实现PC+手机+微信网站五合一建站?  北京网站制作的公司有哪些,北京白云观官方网站?  如何在IIS7中新建站点?详细步骤解析  如何选择高性价比服务器搭建个人网站?  图册素材网站设计制作软件,图册的导出方式有几种?  如何零成本快速生成个人自助网站?  建站之星后台密码遗忘?如何快速找回?  如何通过建站之星自助学习解决操作问题?  如何配置WinSCP新建站点的密钥验证步骤?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  建站主机如何选?高性价比方案全解析  佛山企业网站制作公司有哪些,沟通100网上服务官网?  ,sp开头的版面叫什么?  C++时间戳转换成日期时间的步骤和示例代码  建站主机与服务器功能差异如何区分?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何在香港免费服务器上快速搭建网站?  如何选择适配移动端的WAP自助建站平台?  如何快速上传自定义模板至建站之星?  如何通过WDCP绑定主域名及创建子域名站点?  网站制作说明怎么写,简述网页设计的流程并说明原因?  营销式网站制作方案,销售哪个网站招聘效果最好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。