根据XML文件写DTD文件,并验证有效性

xml文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!-- 在 XML 文件中引入 DTD 文件 -->
 3 <!DOCTYPE orders SYSTEM "orders.dtd">
 4 <orders> <!-- 所有订单信息 -->
 5     <order orderDate="2003-10-20"> <!--orderDate为日期型 -->
 6         <shipTo country="CN"><!--country必须出现 -->
 7             <name>张三峰</name> <!-- 收件人 -->
 8             <street>市中区滨河路778号5+3大酒店</street> <!-- 县/区及街道地址 -->
 9             <city>乐山市</city> <!-- 市/区 -->
10             <state>四川省</state> <!-- 省/自治区/直辖市 -->
11             <phone>13999999999</phone> <!-- 联系电话 -->
12         </shipTo>
13         <items> <!-- 商品列表,item应至少出现1次 -->
14             <item partNum="872-AA"> <!--商品编号,必须有 -->
15                 <productName>Lawnmower</productName><!-- 商品名称 -->
16                 <quantity>1</quantity> <!-- 购买数量 -->
17                 <price>148.95</price> <!-- 单价 -->
18                 <shipDate>2003-10-21</shipDate> <!-- 配送日期 -->
19             </item>
20             <item partNum="926-AA">
21                 <productName>Baby Monitor</productName>
22                 <quantity>1</quantity>
23                 <price>39.98</price>
24                 <shipDate>2003-10-22</shipDate>
25             </item>
26         </items>
27     </order>
28 </orders>
View Code

dtd文件

 1 <!ELEMENT orders (order+)>
 2 
 3 <!ELEMENT order (shipTo+,items+)>
 4 <!ELEMENT items (item*)>
 5 
 6 <!ELEMENT shipTo (name,street,city,state,phone)>
 7 <!ELEMENT item (productName,quantity,price,shipDate)>
 8 
 9 <!ELEMENT name (#PCDATA)>
10 <!ELEMENT street (#PCDATA)>
11 <!ELEMENT city (#PCDATA)>
12 <!ELEMENT state (#PCDATA)>
13 <!ELEMENT phone (#PCDATA)>
14 <!ELEMENT productName (#PCDATA)>
15 <!ELEMENT quantity (#PCDATA)>
16 <!ELEMENT price (#PCDATA)>
17 <!ELEMENT shipDate (#PCDATA)>
18 
19 <!ATTLIST order orderDate CDATA "2003-10-20">
20 <!ATTLIST shipTo country CDATA #REQUIRED>
21 <!ATTLIST item partNum CDATA #REQUIRED>
View Code

TestValidate1.java

 1 package test1;
 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 TestValidate1 {
14 
15     public static void main(String[] args) {
16         String fileName=null;
17         try{
18         Scanner reader=new Scanner(System.in);
19         System.out.println("请输入要验证有效性的XML文件的名字:");
20         fileName=reader.nextLine();
21         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
22         factory.setValidating(true);
23         DocumentBuilder builder=factory.newDocumentBuilder();
24         MyHandler handler=new MyHandler();
25         builder.setErrorHandler(handler);
26         Document document=builder.parse("src/test1/orders.xml");
27         if(handler.errorMessage==null)
28             System.out.println(fileName+"文件是有效的");
29         else
30             System.out.println(fileName+"文件不是有效的");
31         
32         }
33         catch(Exception e){
34             System.out.println(e);
35         }
36 
37     }
38 
39 }
40 
41 class MyHandler extends DefaultHandler{
42     String errorMessage=null;
43     public void error(SAXParseException e) throws SAXException{
44         errorMessage=e.getMessage();
45         System.out.println("一般错误:"+errorMessage);
46     }
47     public void fatalError(SAXParseException e) throws SAXException{
48         errorMessage=e.getMessage();
49         System.out.println("致命错误:"+errorMessage);
50     }
51 }
View Code

 

posted @ 2018-06-19 09:08  喵叽叽  阅读(1270)  评论(0)    收藏  举报