Мне нужно проверить файл XML с данным XSD файлом. Мне просто нужен метод для возврата true, если в противном случае проверка прошла нормально или false.
Проверка XML на XSD
Ответ 1
Возвращает просто true или false (также вам не нужна внешняя библиотека):
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;
}
}
Ответ 2
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
Это может зависеть от библиотеки, которую вы используете, но googling вокруг с "как проверить файл xml в java" дал мне эти результаты, где вы можете найти свой ответ:
Ответ 4
XMLUnit имеет несколько хороших классов для этого, в файле README есть пример:
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();