根据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>
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>
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 }

浙公网安备 33010602011771号