Validation de XML contre XSD [duplicate]


Cette question a déjà une réponse ici:

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

Author: Cœur, 2011-07-25

4 answers

Renvoie simplement true ou false (vous n'avez également pas besoin de 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;
    }
}
 60
Author: Grzegorz Szpetkowski, 2013-03-26 16:49:06
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
Author: alexblum, 2011-07-25 11:50:37

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
Author: morandg, 2011-07-25 11:54:05

XMLUnit a de belles classes pour le 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
Author: devstopfix, 2016-01-17 20:25:15