web-dev-qa-db-fra.com

Validation de XML contre XSD

J'ai besoin de valider un fichier XML avec un fichier XSD donné. J'ai simplement besoin de la méthode pour retourner true si la validation s'est bien passée ou false sinon.

38
Shai

Renvoie simplement vrai ou faux (vous n'avez également besoin d'aucune bibliothèque externe):

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;
    }
}
66
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
alexblum

Cela peut dépendre de la bibliothèque que vous utilisez, mais googler avec "comment valider un fichier xml en Java" m'a donné ces résultats où vous pourriez trouver votre réponse:

premier résultat intéressant

deuxième résultat intéressant

3
morandg

XMLUnit a quelques classes Nice pour ce faire, il y a un exemple dans leur fichier 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();
2
devstopfix