2012-06-08 32 views
8

Tôi có tệp xml được tạo bằng jaxb. Tôi cần phải xác nhận nó đối với một tài liệu xsd. Có thể chỉ cần làm xác nhận mà không unmarshalling. Tôi cần phải in các lỗi trong tệp xml.Xác thực xml được tạo bằng cách sử dụng jaxb dựa vào tệp xsd

+0

Một trong những ưu điểm chính của việc tạo mã ràng buộc từ xsd và sau đó sử dụng mã để tạo một cá thể xml là tạo ra một xml hợp lệ và được tạo đúng. Tôi không chắc chắn lý do tại sao bạn muốn xác thực lại nó? –

+1

Bạn có thể đặt Schema và ValidationEventHandler trên chính bản thân trình soạn thảo. Nó sẽ xác nhận hợp lệ đối với lược đồ trong khi soạn thảo. Xem http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#setSchema(javax.xml.validation.Schema) – Ritesh

Trả lời

10

Có, bạn có thể sử dụng trình xác thực được tìm thấy trong java từ 1.5. dưới đây là tài liệu tham khảo doc

Ngoài ra, bạn có thể sử dụng API dựa trên cơ sở hoặc dựa trên luồng để xác thực tài liệu XML của bạn dựa vào tệp xsd. Nếu bạn muốn sử dụng SAX API cho nhiệm vụ của bạn sau đó nghe là ví dụ:

try { 
    String schemaLang = "http://www.w3.org/2001/XMLSchema"; 

    SchemaFactory factory = SchemaFactory.newInstance(schemaLang); 

    Schema schema = factory.newSchema(new StreamSource("sample.xsd")); 
    Validator validator = schema.newValidator(); 

    validator.validate(new StreamSource("test.xml")); 

} catch (SAXException e) { 
    System.out.println(" sax exception :" + e.getMessage()); 
} catch (Exception ex) { 
    System.out.println("excep :" + ex.getMessage()); 
} 

Nếu không, bạn có thể sử dụng DOM, DOM4J hoặc XOM API. Để tham khảo thêm, bạn có thể xem here.

Có liên quan answer trong ngăn xếp chồng cũng.

+1

Bạn cũng có thể xác nhận trước khi sửa lỗi: JAXBSource source = JAXBSource mới (jaxbContext, objectBeingMarshalled); \t \t validator.validate (nguồn); – Ritesh

+0

Tôi đang nhận ngoại lệ exeception sax này: Mục tiêu xử lý lệnh đối sánh "[xX] [mM] [lL]" không được phép. – AutoMEta

+0

nó có nghĩa là trong XML của bạn bắt đầu nó có một số không gian, loại bỏ không gian hoặc bất cứ điều gì khác ở đầu XML của bạn, hãy làm theo các liên kết: http: //gonithethinker.blogspot.com/2012/06/processing-instruction-target-matching .html @AutoMeta – Forhad

Các vấn đề liên quan