??XMLErrorHandler errorHandler = new XMLErrorHandler();
??reader.setErrorHandler(errorHandler);
??InputStream in = new ByteArrayInputStream(tagetXml);
??InputStreamReader utf8In=new InputStreamReader(in,"utf-8");
??//Document document = reader.read(in);
??reader.read(utf8In);
??XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
??if (errorHandler.getErrors().hasContent()) {
???flag = false;
????? //writer.write(errorHandler.getErrors());
??} else {
????? System.out.println("Xml is OK!.");
??}
??return flag;
?}
3.對上述代碼的注釋:
主要思路:設置SAXReader支持驗證 -〉得到xsd文件的路徑 -〉讀入要驗證的xml文件 -〉OK!;
驗證流程:
-〉設置支持驗證;
SAXReader reader = new SAXReader();
reader.setValidation(true);
-〉設置支持驗證的幾個feature的值;
注明:SAXReader的各個函數的作用和用法詳見dom4j api doc。
-〉設置xsd文件路徑的Property值,這樣就可以依據xsd文件進行驗證了;
語法格式:public void setProperty(java.lang.String name,java.lang.Object value)
-〉讀入要驗證的.xml文件或xml格式的字符串;
*若驗證的是.xml文件,則reader.read(param)中的param為xml文件的路徑,這個xml文件的路徑應該設置為相對路徑;(xml相對路徑如何獲取和表示這個問題有待解決)
*若驗證的是字符串,則要把字符串轉換為InputStream類型,這是read方法的參數要求。(詳見dom4j api doc)
那么怎么把字符串轉換為InputStream類型呢?
法一:
我們知道,ByteArrayInputStream(byte[] buf)方法可以使byte字節碼轉為InputStream流,那么我們先通過getBytes()方法把字符串轉為byte[]類型,再通過ByteArrayInputStream(byte[] buf)方法轉為InputStream流就ok了!
String xmldescription = (String) obj; ?
byte[] xmlMsgBytes =xmldescription.getBytes();
……
InputStream in = new ByteArrayInputStream(xmlMsgBytes);
法二:
InputStream in=TAEncodeDecoderFactory.class.getResourceAsStream("encoder_decoder_mapping.xml");
-〉這樣SAXReader就可以根據xsd文件對所讀入的xml信息進行驗證了!
-〉接下來,還可以使用XMLErrorHandler和XMLWriter這兩個類在控制臺輸出錯誤提示信息;
-〉xml validation is ok!
二.內容補充:
參考資料“DOM4J 驗證XML Schema (我要的成功 的blog)
http://kingofhawks.spaces.live.com/?_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=cat%3d%25e8%25ae%25a1%25e7%25ae%2597%25e6%259c%25ba%25e4%25b8%258e%2bInternet”中提到“如何讀取Class path下的xsd文件:需要實現EntityResolver 接口,在resolveEntity()中讀取當前類路徑下的xsd文件,并返回InputSource instance.”的問題,下面談談對EntityResolver的理解:
這段代碼是關于實體解析器用來解析外部實體引用的,在這里并不需要。
注釋:
1.關于什么是實體,什么是外部實體,詳見資料:
xml實用大全
http://phpso.com/data/htm/XML/408.htm
2.關于實體解析器如何使用,詳見資料:
技巧:使用實體解析器
http://www-128.ibm.com/developerworks/cn/xml/tips/x-tipent/index.html
三.尚未解決的問題:
如何獲取xml相對路徑?