为何XML根元素company必须在DTD中声明?
为什么XML根元素company也需要在DTD中声明?
这是因为DTD的核心作用就是定义XML文档的合法结构规则——只要你在XML里声明了DOCTYPE(也就是启用了DTD约束),所有出现在文档里的元素,包括根元素,都必须在DTD中明确声明。
你当前的代码里,DTD部分是空的:
<!DOCTYPE company [ ]>
解析器找不到根元素company的定义,所以会抛出「Element type "company" must be declared」的警告。
修复方法有两种:
在DTD中补全根元素声明
如果你的company元素是空的(没有子元素),可以这样写:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE company [ <!ELEMENT company EMPTY> ]> <company> </company>如果
company有子元素,比如包含多个employee,就需要同时声明子元素:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE company [ <!ELEMENT company (employee*)> <!ELEMENT employee (name, age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> <company> <employee> <name>张三</name> <age>30</age> </employee> </company>移除DTD声明
如果你根本不需要DTD的结构约束,直接删掉整个<!DOCTYPE company []>行即可,解析器就不会再要求元素声明了。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

