40 votes

Validation XML contre XSD

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

71voto

Grzegorz Szpetkowski Points 10225

Renvoie simplement vrai ou faux (vous n'avez 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;
    }
}

5voto

devstopfix Points 3560

XMLUnit a quelques classes sympas 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();

3voto

alexblum Points 1342
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;
  }
}

3voto

morandg Points 430

Cela peut dépendre de la bibliothèque que vous utilisez, mais googler avec "comment valider le 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X