检查dtd和Xschema文件限制下的xml文件是否符合的Java文件
发布日期:2021-05-13 00:44:53 浏览次数:17 分类:博客文章

本文共 8937 字,大约阅读时间需要 29 分钟。

先来xml文件:

1 
2 3
4
5
6
张三峰
7
市中区滨河路778号5+3大酒店
8
乐山市
9
四川省
10
13999999999
11
12
13
14
Lawnmower
15
1
16
148.95
17
2003-10-21
18
19
20
Baby Monitor
21
1
22
39.98
23
2003-10-22
24
25
26
27
orders.xml

再来对应的dtd文件:

1 
2
3 4
5
6
7
8
9
10 11
12
13
14
15
16
17 18
19
20
orders.dtd

<!--应该有些地方限制得不太合理,但是可以运行出来,这里主要记录一下Java文件-->

下面是对应的检查的Java类:

1 import javax.xml.parsers.DocumentBuilder; 2 import javax.xml.parsers.DocumentBuilderFactory; 3 import org.w3c.dom.Document; 4  5 public class XmlDtdCheck { 6  7     public static void main(String[] args) { 8         // TODO Auto-generated method stub 9         try {10             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();11             factory.setValidating(true);12             13             DocumentBuilder builder = factory.newDocumentBuilder();14             Document doc1 = (Document) builder.parse("orders.xml");15             Document doc2 = (Document) builder.parse("citizen.xml");16             // System.out.println(doc.getNodeValue());17             // doc并不是null,它是一个对象18         } catch (Exception e) {19             // TODO: handle exception20             System.err.println("ERROR!!!" + e.getMessage());21         }22     }23 24 }
TestDTD.java

<!--这里只是转成了document类,并没有使用-->

然后又是一个严格一点的Java类:

1 import java.io.File; 2  3 import java.io.*; 4 import org.xml.parsers.*; 5 import org.w3c.dom.*; 6 import java.util.Scanner; 7  8 public class TestValidate { 9 10     public static void main(String[] args) {11         // TODO Auto-generated method stub12         try {13             DocumentBuilderFacory factor = DocumentBilderFactory.newInstance();14             factor.setValidating(true);15             DocumentBuilder builder = factory.newDocumentBuilder();16             MyHandler handler = new MyHandler();17             builder.setErrorHandler(handler);18             Document document = builder.parse(new File("orders.xml"));19             20             if(handler.errorMessage == null) {21                 System.out.println("文件是有效的");22             } else {23                 System.out.println("文件是无效的");24             }25         } catch (Exception e) {26             System.out.println(e);27         }28     }29 }30 31 class MyHandler extends DefaultHandler {32     String errorMessage = null;33     34     public void error(SAXParseException e) throws SAXException {35         errorMessage = e.getMessage();36         System.out.println("一般错误"+errorMessage);37     }38     39     public void fatalError(SAXParseException e) throws SAXException {40         errorMessage = e.getMessage();41         System.out.println("致命错误"+errorMessage);42     }43 }
TestValidate.java

代码未经验证,请检验后运行。

 


 

接下来是验证Schema文件下的XML文件的有效性。

老规矩——XML文件:

1 
2
5
6
2018-05-20
7
8
张三峰
9
市中区滨河路778号5+3大酒店
10
乐山市
11
四川省
12
13999999999
13
14
15
16
香辣鸡翅
17
1
18
18.95
19
2018-05-21
20
21
22
烧烤五花肉
23
20
24
39.98
25
2018-05-20
26
27
28
29
30 31
orders.xml

xsd文件:

1 
5
6
7
8
9
10
11
12 13
14
15
16
17
18
19
20
21
22 23
24
25
26
27
28
29
30
31
32
33
34
35 36
37
38
39
40
41
42
43 44
45
46
47
48
49
50
51
52
53
54
55 56
57
58
59
60
61
62
63
64 65
66
67
71
72
73
74
75
76
77
78 79
80
81
82
83
84
85
86 87
88
89
90
91
92
93
94 95
96
97
98
99
100
101
102
orders.xsd

验证xml文件有效性的Java文件:

1 import java.io.File; 2  3 import javax.xml.transform.stream.StreamSource; 4 import javax.xml.validation.Schema; 5 import javax.xml.validation.SchemaFactory; 6 import javax.xml.validation.Validator; 7  8 import org.xml.sax.SAXException; 9 import org.xml.sax.SAXParseException;10 import org.xml.sax.helpers.DefaultHandler;11 12 public class TestXSD {13 14     public static void main(String[] args) {15         // TODO Auto-generated method stub16         File xsdfile = new File("orders.xsd");17         File xmlfile = new File("orders.xml");18         Handler errorHandler = null;19         try {20             SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");21             Schema schema = schemaFactory.newSchema(xsdfile);22             Validator validator = schema.newValidator();23             errorHandler = new Handler();24             validator.setErrorHandler(errorHandler);25             validator.validate(new StreamSource(xmlfile));26         } catch (Exception e) {27             System.out.println(e);28         }29         if (errorHandler.errorMessage == null) {30             System.out.println("XML 文件:" + xmlfile.getName()+"符合模式");31         } else {32             System.out.println("XML 文件:" + xmlfile.getName()+"不符合模式");33         }34     }35 }36 37 class Handler extends DefaultHandler {38     String errorMessage = null;39     40     public void error(SAXParseException e) throws SAXException {41         errorMessage = e.getMessage();42         int row = e.getLineNumber();43         int colums = e.getColumnNumber();44         System.out.println("一般错误"+errorMessage+"位置:"+row+","+colums);45     }46     47     public void fatalError(SAXParseException e) throws SAXException {48         errorMessage = e.getMessage();49         int row = e.getLineNumber();50         int colums = e.getColumnNumber();51         System.out.println("致命错误"+errorMessage+"位置:"+row+","+colums);52     }53 }
TestXSD.java

 

上一篇:Java中实现SAX解析xml文件到MySQL数据库
下一篇:JAVA连接、操作数据库的DBHelper

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月19日 13时54分24秒