DTD 验证

DTD 验证实战全攻略

(从零到能验证任何 XML + DTD,2025 年最新工具链)

1. 验证的本质

让电脑自动检查:
「你的 XML 是否 100% 符合你写的 DTD 规则」
→ 只要有一点不符(多了标签、少了属性、顺序错了、ID 重复……)就报错。

2. 2025 年最常用的 8 种验证方法(从简单到专业)

级别工具/方法操作难度推荐场景一行命令 / 操作步骤
1VS Code(最推荐)★☆☆☆☆日常学习、写作业、小项目安装插件 “XML” → 直接打开 XML 文件 → 红波浪线实时报错
2Oxygen XML Editor(学生免费)★★☆☆☆专业写作、出版、需要可视化对比打开 XML → 点红叉验证按钮 → 详细错误列表
3Notepad++ + XML Tools★☆☆☆☆轻量快速菜单 → Plugins → XML Tools → Validate now
4在线验证网站★☆☆☆☆临时验证、不想装软件推荐站点(2025 有效):
https://www.xmlvalidation.com上传 XML + DTD 文件 → 点 Validate
https://www.utilities-online.info/xml-validator
5xmllint(命令行神器)★★☆☆☆服务器、CI/CD、脚本批量验证xmllint --valid --noout mybook.xml
6Java 内置验证★★★☆☆写 Java 程序时验证见下面代码模板
7Python + lxml★★★☆☆Python 项目自动验证见下面代码模板
8libxml2(底层最严)★★★★☆最严格验证(连 VS Code 都放过的错也能抓)xmllint --dtdvalid books.dtd mybook.xml

3. 实战演示(内部 DTD + 外部 DTD 两种都测)

文件1:books.xml(内部 DTD)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
  <!ELEMENT bookstore (book+)>
  <!ELEMENT book (title, author+)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ATTLIST book id ID #REQUIRED>
]>
<bookstore>
  <book id="b1">
    <title>XML宝典</title>
    <author>张三</author>
    <author>李四</author>
  </book>
</bookstore>

文件2:外部 DTD 版(books.dtd 同上规则,XML 改成一行)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore SYSTEM "books.dtd">
<bookstore>……</bookstore>

用 xmllint 一键验证(最常用):

# 内部 DTD
xmllint --valid --noout books-internal.xml

# 外部 DTD(推荐)
xmllint --valid --noout books-external.xml
# 或者更严格指定 DTD 文件
xmllint --dtdvalid books.dtd books-external.xml

如果全部通过 → 什么都不输出
如果出错 → 立刻告诉你第几行错了什么

4. 常见错误 & 报错信息速查表

错误现象典型报错信息原因
少了必填属性 idattribute id required but missing#REQUIRED 属性没写
ID 重复ID b1 already defined两个 book 都用了 id=”b1″
标签顺序错了element author not allowed hereauthor 写在了 title 前面
多了一个没定义的标签element xxx not declaredDTD 没声明
外部 DTD 路径找不到failed to load external DTDbooks.dtd 路径写错或不在同目录
实体没定义就用了reference to undefined entity &company;少了

5. 一键验证脚本(复制粘贴就行)

Windows(批处理):

@echo off
xmllint --valid --noout *.xml
if %errorlevel% == 0 (
  echo ✓ 所有 XML 验证通过!
) else (
  echo ✗ 有文件验证失败
)
pause

Linux/macOS(bash):

#!/bin/bash
for f in *.xml; do
  echo "正在验证 $f ..."
  xmllint --valid --noout "$f" || exit 1
done
echo "全部通过!"

现在你已经可以验证任何 DTD + XML 了!
想要我给你一个「带 10 种故意错误」的 XML 练习文件 + 答案解析,直接回复“给我错误练习”就行!

文章已创建 2679

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部