Tôi cần xác thực tệp XML bằng một tệp XSD đã cho. Tôi chỉ đơn giản là cần phương thức trả về true nếu việc xác thực được thực hiện tốt hay sai.Xác thực XML đối với XSD
34
A
Trả lời
59
Trả về đơn giản là đúng hoặc sai (bạn cũng không cần bất kỳ thư viện bên ngoài nào):
static boolean validateAgainstXSD(InputStream xml, InputStream xsd)
{
try
{
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(xsd));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xml));
return true;
}
catch(Exception ex)
{
return false;
}
}
3
public boolean validate() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"http://domain.com/mynamespace/mySchema.xsd");
Document doc = null;
try {
DocumentBuilder parser = factory.newDocumentBuilder();
doc = parser.parse("data.xml");
return true;
} catch (Exception e) {
return false;
}
}
3
sức này phụ thuộc vào thư viện bạn sử dụng nhưng googling xung quanh với "làm thế nào để xác thực tệp xml trong java" đã cho tôi những kết quả này, nơi bạn có thể tìm thấy câu trả lời của bạn:
+0
Cảm ơn thông tin đó. Giúp tôi. – Andez
2
XMLUnit có một số lớp học thoải mái để làm điều này, có một ví dụ trong tập tin README của họ:
Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI);
v.setSchemaSources(Input.fromFile("local.xsd").build());
ValidationResult result = v.validateInstance(new StreamSource(new File("local.xml")));
return result.isValid();
Các vấn đề liên quan
- 1. Lỗi khi xác thực XML đối với XSD
- 2. Xác thực Xml bằng lược đồ XSD
- 3. Xác thực xml dựa trên xsd với JS/jQuery
- 4. eclipse: xác nhận xml với xsd
- 5. Làm cách nào để xác thực xml lớn đối với lược đồ xsd?
- 6. Xác thực XML dựa vào XSD theo một phương thức
- 7. Công cụ xác thực lược đồ XML XSD
- 8. Xác thực XSD tự động
- 9. Xác thực Java xsd của xml không có vùng tên
- 10. Xác nhận hợp lệ XML với Schematron/XSD trong C#
- 11. VB.NET xác thực tệp XML dựa vào tệp XSD và phân tích cú pháp qua xml
- 12. Làm cách nào để sử dụng PowerShell để Xác thực các tệp XML với XSD?
- 13. C# Xác thực mẫu XSD XDocument với ký tự $
- 14. Xác thực tính duy nhất của thuộc tính với XSD trên tài liệu XML
- 15. bạn có thể xác thực xsd với xml trong năm 2010 không?
- 16. Qt C++ XML, xác thực đối với DTD?
- 17. Xác nhận lược đồ XSD bằng XSD
- 18. xác thực lược đồ XML
- 19. Xác thực lược đồ XSD trong Ruby
- 20. tạo xml từ xsd
- 21. Tắt xác thực XSD của các tệp mùa xuân
- 22. Xác thực xml được tạo bằng cách sử dụng jaxb dựa vào tệp xsd
- 23. Cách hiệu quả nhất để xác thực XML dựa vào XSD
- 24. Java xác nhận XML dựa trên XSD Schema
- 25. Tôi làm cách nào để xác thực XML bằng XSD trong Perl?
- 26. Xác thực XML dựa vào XSD và bỏ qua thứ tự các phần tử con
- 27. Có cách nào để xác thực XSD luồng XML trong PHP
- 28. Lỗi xác thực XML bằng lược đồ XSD lồng nhau - Loại không được khai báo
- 29. Làm cách nào để xác thực xml dựa trên xsd và nhận các lỗi * ALL *?
- 30. XSD: Cách xác thực tệp XML theo giá trị của một số thẻ?
Không nên thực thi ** chỉ ** được sử dụng cho các tình huống thực thi và ** không ** cho luồng điều khiển? Tôi sẽ không xem xét nó execptional, nếu thực hiện một 'thử nghiệm'. Nó có thể vượt qua, hoặc thất bại. Hai lựa chọn người ta phải xem xét. Ngoài ra, hãy xem http://stackoverflow.com/questions/15732/whats-the-best-way-to-validate-an-xml-file-against-an-xsd-file – mike
Mã này không hoạt động khi tệp để xác thực có chứa khai báo DOCTYPE, nếu ai đó biết lý do tại sao? – HugoPoi
Trong trường hợp ai đó gặp lỗi "Không có lược đồ thực hiện tha [...]", có thể là do bạn đã làm lỗi tương tự như tôi, sử dụng hằng số XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI. Thay thế nó bằng hằng số được đề cập ở trên. –