2013-04-26 29 views
5

Tôi đang cố gắng xác thực tài liệu XML bằng Xerces-J.Sử dụng Xerces-j để xác thực Tài liệu XML

Tôi muốn trình xác thực để chọn và giải quyết mọi tệp XSD hoặc DTD được liên kết (sử dụng sắp xếp schemalocation, nonamespaceschemalocationa và DOCTYPE). Có vẻ như việc tải các tài nguyên này có thể được giao cho một lớp Resolver.

Tuy nhiên, tất cả các mẫu tôi đã thấy bắt đầu tạo trình xác thực từ lược đồ.

Có thể điều này theo cách khác, yêu cầu xerces xác thực tài liệu XML và tải nó lên, hoặc trước tiên tôi phải phân tích cú pháp tệp XML tìm kiếm các tham chiếu lược đồ, tải chúng, sau đó tạo validator từ các lược đồ?

Trong một thế giới lý tưởng validator cũng sẽ hỗ trợ xsd 1.1

Trả lời

3

Bạn cung cấp một phân tích cú pháp với một EntityResolver để sử dụng khi nhìn lên <! Tờ khai DOCTYPE hoặc các thuộc tính giản đồ. Trình phân giải thực thể phổ biến nhất sử dụng các tệp danh mục, về cơ bản là các tệp XML hoặc tệp văn bản xác định từ điển ID công khai, ID hệ thống và URI cho các tệp vật lý. Xem gói org.apache.xml.resolver. Nhưng bạn cũng có thể cung cấp triển khai EntityResolver của riêng bạn.

CatalogResolver resolver = new CatalogResolver(); 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setValidating(true); 
dbf.setFeature("http://apache.org/xml/features/validation/dynamic", true); 
DocumentBuilder parser = dbf.newDocumentBuilder(); 
parser.setEntityResolver(resolver); 
Document doc = parser.parse(someFile);