Notepad++使用XML Tools验证XML时提示DTD is prohibited如何解决
报错原因
Notepad++的XML Tools插件默认开启DTD安全限制,会直接拦截所有内联、外部DTD的加载解析,因此验证带DOCTYPE声明的XML文件时会抛出DTD is prohibited报错,该问题是插件默认配置导致,和你写的XML语法无直接关系。
解决步骤
- 打开Notepad++顶部菜单栏的「插件」列表,找到XML Tools的配置入口
- 在配置页中找到「Prohibit DTD(禁止DTD)」的勾选框,取消默认选中状态
- 保存配置后重启Notepad++,再重新触发XML验证即可
注意:你提供的代码样例里,手动加在DOCTYPE内部的
DTD is prohibited. <---------------error message I get on Notepad ++是你标注报错位置的说明文字,不属于合法DTD语法,测试前需要删掉这行,否则会触发额外的语法报错。
可正常通过验证的XML代码如下:
<?xml version="1.0"?> <!DOCTYPE root[ <!ELEMENT root (dept*, staff*)> <!ELEMENT dept (#PCDATA)> <!ELEMENT staff (staff | name)> <!ELEMENT name (#PCDATA)> <!ATTLIST dept id ID #REQUIRED> <!ATTLIST staff id ID #REQUIRED dept IDREF #IMPLIED> ]> <root> <dept id="i1">it</dept> <dept id="i2">law</dept> <staff id="s3"> <name>steve</name> </staff> <staff id="s2" dept="i1"> <name>jerry</name> </staff> <staff id="s4" dept="i2"> <staff id="s5"> <name>peter</name> </staff> </staff> </root>
补充说明
- 关闭DTD禁止选项仅适用于调试你自己编写的、来源可信的XML文件,处理未知来源的XML文件时建议重新开启该选项,防范恶意DTD注入的安全风险。
- 如果取消勾选后依然报错,可以将XML Tools插件升级到最新稳定版,部分旧版本存在DTD配置不生效的已知问题。
内容的提问来源于stack exchange,提问作者J L
相关产品推荐
相关产品推荐

