如果不写,在读xml文件是会抛出异常:
org.dom4j.DocumentException: Error on line 4 of document file:/D:/XML/xmlParser/poet.xml : 组件类型“Poets”未被声明。 Nested exception: 组件类型“Poets”未被声明。
at org.dom4j.io.SAXReader.read(SAXReader.java:355)
at org.dom4j.io.SAXReader.read(SAXReader.java:251)
at PoetParser.parseXmlFile(PoetParser.java:21)
at PoetParser.main(PoetParser.java:44)
Nested exception: 
org.xml.sax.SAXParseException: 组件类型“Poets”未被声明。
at org.apache.crimson.parser.Parser2.error(Parser2.java:3354)
at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1502)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at org.dom4j.io.SAXReader.read(SAXReader.java:251)
at PoetParser.parseXmlFile(PoetParser.java:21)
at PoetParser.main(PoetParser.java:44)
Nested exception: org.xml.sax.SAXParseException: 组件类型“Poets”未被声明。
at org.apache.crimson.parser.Parser2.error(Parser2.java:3354)
at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1502)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
at org.dom4j.io.SAXReader.read(SAXReader.java:339)
at org.dom4j.io.SAXReader.read(SAXReader.java:251)
at PoetParser.parseXmlFile(PoetParser.java:21)
at PoetParser.main(PoetParser.java:44)
java.lang.NullPointerException
at PoetParser.parseXmlFile(PoetParser.java:27)
at PoetParser.main(PoetParser.java:44)
这是我自己随便写的一个xml
如果加了dtd就没问题,但是有些xml不加dtd也可以通过验证,继续求助!

解决方案 »

  1.   

    xml文件不一定要写DTD这句话的,因为XML文件可以用DTD或者Schema来验证,Schema的功能比DTD还要强,
    你用jDom或者Dom4j读取XML文件应该不会报错的,除非你的XML文件的格式本身就不对
      

  2.   

    xml文件中既没有dtd也没有schema,应该是外部验证吧
    如果是schema方式
    xsd的文件名是不是一定要和xml文件名相同呢?