1. 程式人生 > >校驗xml的合法性

校驗xml的合法性

方法一:通過DTD檔案

方法二:通過XSD檔案

最後選用了方法二,原因如下:

· XML Schema 可針對未來的需求進行擴充套件

· XML Schema 更完善,功能更強大

· XML Schema 基於 XML 編寫

· XML Schema 支援資料型別

· XML Schema 支援名稱空間

太官方的理由。我用xsd的原因是:正在做的是web service 的專案,需要接受客戶端傳入的xml資料,可能會出現一下情況:

1.Xml格式錯誤

2.結點資料型別錯誤

3.資料不完整,結點資料為空

DTD不能很好的解決這些問題,所以用了XSD。用了一下午的時間熟悉基本的寫法,第二天直接按

xml的要求編寫xsd檔案。過程中遇到了一個問題:

xsd中提供的時間日期型別(dateTime)是這樣的:YYYY-MM-DDThh:mm:ss

而我需要的是這樣的:YYYY-MM-DDhh:mm:ss,也就是把T換成空格。百度了很多資料也不知道怎麼解決,最後用的正則解決,暫時可用,不知道後面會不會出問題。

程式碼如下:

<!-- 自定義時間日期型別 yyyy-MM-dd HH:mm:ss -->
	<xs:simpleType name="myDateTime">	
		<xs:restriction base="xs:string">
			<xs:pattern value="((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d|((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))"></xs:pattern>
		</xs:restriction>
	</xs:simpleType>