dtd文件

1 <!ELEMENT 中華人民共和國公民 (公民*)> 2 <!ELEMENT 公民 (身份證號, 姓名+, 籍貫, 地址, 電話+)> 3 <!ELEMENT 身份證號 (#PCDATA)> 4 <!ELEMENT 姓名 (#PCDATA)> 5 <!ELEMENT 籍貫 (#PCDATA)> 6 <!ELEMENT 地址 (#PCDATA)> 7 <!ELEMENT 電話 (#PCDATA)> 8 <!ATTLIST 公民 性別 (famale | male) "male"> 9 <!ATTLIST 姓名 中英文 (中文 | 英文) "中文"> 10 <!ATTLIST 電話 11 手機座機 (手機|座機) #REQUIRED 12 號碼 CDATA #REQUIRED 13 >
xml文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE 中華人民共和國公民 SYSTEM "citizen.dtd"> 3 <中華人民共和國公民> 4 <公民 性別="male"> 5 <身份證號>510722199505210755</身份證號> 6 <姓名 中英文="中文">馬克</姓名> 7 <籍貫>中國</籍貫> 8 <地址>四川省樂山市濱河路</地址> 9 <電話 手機座機="手機" 號碼="123456"></電話> 10 </公民> 11 </中華人民共和國公民>
TestValidate2.java

1 package test2; 2 import java.io.File; 3 import java.util.Scanner; 4 5 import javax.xml.parsers.DocumentBuilder; 6 import javax.xml.parsers.DocumentBuilderFactory; 7 8 import org.w3c.dom.Document; 9 import org.xml.sax.SAXException; 10 import org.xml.sax.SAXParseException; 11 import org.xml.sax.helpers.DefaultHandler; 12 13 public class TestValidate2 { 14 15 public static void main(String[] args) { 16 String fileName=null; 17 try{Scanner reader=new Scanner(System.in); 18 System.out.println("請輸入要驗證有效性的XML文件的名字:"); 19 fileName=reader.nextLine(); 20 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 21 factory.setValidating(true); 22 DocumentBuilder builder=factory.newDocumentBuilder(); 23 MyHandler handler=new MyHandler(); 24 builder.setErrorHandler(handler); 25 Document document=builder.parse("src/test2/citizen.xml"); 26 if(handler.errorMessage==null) 27 System.out.println(fileName+"文件是有效的"); 28 else 29 System.out.println(fileName+"文件不是有效的"); 30 31 } 32 catch(Exception e){ 33 System.out.println(e); 34 } 35 36 } 37 38 } 39 40 class MyHandler extends DefaultHandler{ 41 String errorMessage=null; 42 public void error(SAXParseException e) throws SAXException{ 43 errorMessage=e.getMessage(); 44 System.out.println("一般錯誤:"+errorMessage); 45 } 46 public void fatalError(SAXParseException e) throws SAXException{ 47 errorMessage=e.getMessage(); 48 System.out.println("致命錯誤:"+errorMessage); 49 } 50 }