javacode:
public class ReadXml{
public static Vector<Student> readXML(String xmlFile) {
Document doc= generateDOMTree(xmlFile);
NodeList elements = doc.getElementsByTagName("personel");
int iLength = elements.getLength();

System.out.println("iLength="+iLength);
for(int i=0; i<iLength; i++){
//System.out.println("for:i"+i);
Element element = (Element)elements.item(i);
NamedNodeMap attributes = element.getAttributes();
System.out.println("i="+i+"a"+element.getChildNodes().item(i).getFirstChild());
if(attributes.getNamedItem("id")!=null){
Attr attr = (Attr)attributes.item(0);
System.out.println(attr.getNodeValue());


}
}
//p(elements.item(0).getAttributes());
return stu;
} public static Document generateDOMTree(String xmlFile) { PrintWriter writer = null;
Document doc = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
writer = new PrintWriter(new FileWriter("I:/validateResult.txt"));
ValidateErrorHandler validateErrorHandler = new ValidateErrorHandler(writer);

builder.setErrorHandler(validateErrorHandler);
doc = builder.parse(xmlFile);

} catch (Exception e) {
System.err.println(e);
e.printStackTrace();
}finally{
if(writer != null){
writer.close();
}
}
return doc;
} public static void main(String[] args) throws Exception {
        readXML("I:\\xml\\students.xml");
}
}dtd文件:<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT students (student)+>
<!ELEMENT student (name,sex,lateNum*,lackTaskNum1*,lackTaskNum2*,lackLessonNum*,groupNum*)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT lateNum (#PCDATA)>
<!ELEMENT lackTaskNum1 (#PCDATA)>
<!ELEMENT lackTaskNum2 (#PCDATA)>
<!ELEMENT lackLessonNum (#PCDATA)>
<!ELEMENT groupNum (#PCDATA)>
<!ATTLIST student id ID #REQUIRED>xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "I:\xml\students.dtd">
<students>
<student id="IIIT3075-13">
<name>曾文军</name>
<sex>男</sex>
<lateNum>1</lateNum>
<lackTaskNum1>2</lackTaskNum1>
<lackTaskNum2>3</lackTaskNum2>
<lackLessonNum>4</lackLessonNum>
<groupNum>5</groupNum>
</student>
</students>编译java代码时报错:
org.xml.sax.SAXParseException: Valid documents must have a <!DOCTYPE declaration.
at org.apache.crimson.parser.Parser2.warning(Parser2.java:3148)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:491)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:146)
at FileManager.generateDOMTree(FileManager.java:141)
at FileManager.readXML(FileManager.java:108)
at FileManager.main(FileManager.java:157)
Exception in thread "main" java.lang.NullPointerException
at FileManager.readXML(FileManager.java:109)
at FileManager.main(FileManager.java:157)
输入validateResult.txt的报错信息是:[Warning]:Valid documents must have a <!DOCTYPE declaration.谁知道这是为什么吗?

解决方案 »

  1.   

    把这行删掉试试。<!DOCTYPE students SYSTEM "I:\xml\students.dtd">
      

  2.   

    你的dtd有问题!
    需要加上<!DOCTYPE students 
      

  3.   

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE students[
    <!ELEMENT students (student)+> 
    <!ELEMENT student (name,sex,lateNum*,lackTaskNum1*,lackTaskNum2*,lackLessonNum*,groupNum*)> 
    <!ELEMENT name (#PCDATA)> 
    <!ELEMENT sex (#PCDATA)> 
    <!ELEMENT lateNum (#PCDATA)> 
    <!ELEMENT lackTaskNum1 (#PCDATA)> 
    <!ELEMENT lackTaskNum2 (#PCDATA)> 
    <!ELEMENT lackLessonNum (#PCDATA)> 
    <!ELEMENT groupNum (#PCDATA)> 
    <!ATTLIST student id ID #REQUIRED>
    ]>
      

  4.   

    先谢谢这位兄弟我不是有 <!DOCTYPE students SYSTEM "I:\xml\students.dtd">    吗?你下面的哪个贴子用的是内部DTD,我用外部DTD应该也差不多吧??
      

  5.   

    我都用了这个了就不用dom4j了
      

  6.   

    报强调要有 <!DOCTYPE students SYSTEM "I:\xml\students.dtd"> 删掉能行吗?
      

  7.   

    看篇文章,英文版的,对你会有所帮助!
    http://www.javaworld.com/jw-04-2000/jw-0407-advsax.html?page=3