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.谁知道这是为什么吗?
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.谁知道这是为什么吗?
需要加上<!DOCTYPE students
<!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>
]>
http://www.javaworld.com/jw-04-2000/jw-0407-advsax.html?page=3