0

0

如何在Emacs中编辑和验证XML

煙雲

煙雲

发布时间:2025-12-20 14:29:08

|

322人浏览过

|

来源于php中文网

原创

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

如何在emacs中编辑和验证xml

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 实现即时校验:

易森网络企业版
易森网络企业版

如果您是新用户,请直接将本程序的所有文件上传在任一文件夹下,Rewrite 目录下放置了伪静态规则和筛选器,可将规则添加进IIS,即可正常使用,不用进行任何设置;(可修改图片等)默认的管理员用户名、密码和验证码都是:yeesen系统默认关闭,请上传后登陆后台点击“核心管理”里操作如下:进入“配置管理”中的&ld

下载
  • 确保系统已安装 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 可能报编码错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.09.27

typedef和define区别
typedef和define区别

typedef和define区别在类型检查、作用范围、可读性、错误处理和内存占用等。本专题为大家提供typedef和define相关的文章、下载、课程内容,供大家免费下载体验。

109

2023.09.26

define的用法
define的用法

define用法:1、定义常量;2、定义函数宏:3、定义条件编译;4、定义多行宏。更多关于define的用法的内容,大家可以阅读本专题下的文章。

337

2023.10.11

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

760

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

432

2024.06.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1897

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2091

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1054

2024.11.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

9

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号