Validation Java xsd de xml sans espace de noms

Je souhaite valider un fichier XML par rapport à un schéma XSD. L’élément racine des fichiers XML ne contient pas de détails d’espace de nom ou xsi. Il n’a pas d’atsortingbuts donc juste .

J’ai essayé le code suivant sur http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapap.html sans cvc-elt.1: Cannot find the declaration of element 'root' car je reçois cvc-elt.1: Cannot find the declaration of element 'root'

 SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); File schemaFile = new File("schema.xsd"); Schema xsdScheme = factory.newSchema(schemaFile); Validator validator = xsdScheme.newValidator(); Source source = new StreamSource(xmlfile); validator.validate(source); 

Le XML valide bien avec les en-têtes des espaces de noms inclus, etc. (ajouté via xmlspy), mais j’aurais pensé que l’espace de noms xml pourrait être déclaré sans avoir à modifier manuellement le fichier source?

Edition et solution:

 public static void validateAgainstXSD(File file) { try { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); File schemaFile = new File("path/to/xsd"); Schema xsdScheme = factory.newSchema(schemaFile); Validator validator = xsdScheme.newValidator(); SAXSource source = new SAXSource( new NamespaceFilter(XMLReaderFactory.createXMLReader()), new InputSource(new FileInputStream(file))); validator.validate(source,null); } catch (Exception e) { e.printStackTrace(); } } protected static class NamespaceFilter extends XMLFilterImpl { Ssortingng requiredNamespace = "namespace"; public NamespaceFilter(XMLReader parent) { super(parent); } @Override public void startElement(Ssortingng arg0, Ssortingng arg1, Ssortingng arg2, Atsortingbutes arg3) throws SAXException { if(!arg0.equals(requiredNamespace)) arg0 = requiredNamespace; super.startElement(arg0, arg1, arg2, arg3); } } 

Vous avez deux préoccupations distinctes dont vous devez vous occuper:

  1. Déclarez l’espace de noms utilisé par votre document.
  2. Mettre un atsortingbut xsi:schemaLocation dans le fichier pour donner un indice (!) À l’ endroit où se trouve le schéma.

Vous pouvez ignorer la deuxième partie en toute sécurité, car l’emplacement n’est qu’un indice. Vous ne pouvez pas sauter la première partie. L’espace de nom déclaré dans le fichier XML est mis en correspondance avec le schéma. Important, ceci:

  ...  

N’est-ce pas la même chose que ça:

  ...  

Vous devez donc déclarer votre espace de noms dans le document XML, sinon il ne correspondra pas à votre schéma et vous obtiendrez cette erreur.