Comment obtenir de l'erreur du numéro de la ligne lors de la validation d'un fichier XML à l'encontre d'un schéma XML
Je suis en train de validade un XML à l'encontre d'un Schéma W3C XML.
Le code suivant fait le travail et les rapports quand l'erreur se produit. Mais je ne suis pas en mesure d'obtenir le numéro de ligne de l'erreur. Elle renvoie toujours -1.
Est-il un moyen facile d'obtenir le numéro de la ligne?
import java.io.File;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.w3c.dom.Document;
import org.xml.sax.SAXParseException;
public class XMLValidation {
public static void main(String[] args) {
try {
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("myxml.xml"));
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(new File("myschema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(new DOMSource(document));
} catch (SAXParseException e) {
System.out.println(e.getLineNumber());
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Mads, que d'autres post concerne C#, pas de java.
OriginalL'auteur pablosaraiva | 2010-12-03
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ce
http://www.herongyang.com/XML-Schema/Xerces2-XSD-Validation-with-XMLReader.html
qui semble donner des précisions(inclure les numéros de ligne)
l'aide de ce code:
merci pour votre réponse, mais où dois-je mettre le fichier XSD?
OriginalL'auteur Mads Hansen
Essayez d'utiliser un SAXLocator
http://download.oracle.com/javase/1.5.0/docs/api/org/xml/sax/Locator.html
Les analyseurs ne sont pas tenus d'en fournir un, mais si ils le font, il doit signaler les numéros de ligne
Je pense que votre code doit inclure:
(voir http://www.java-tips.org/java-se-tips/org.xml.sax/using-xml-locator-to-indicate-current-parser-pos.html)
L'analyseur va vous donner un localisateur qui vous pouvez ensuite utiliser pour obtenir le numéro de la ligne. C'est probablement la peine d'impression/de débogage lorsque cela se produit pour voir si vous possédez une carte locator
Vous probbaly ont pour définir le Localisateur. Ici est un exemple. exampledepot.com/egs/org.xml.sax/SetLocator.html je ne peux pas garantir que cela va fonctionner. Si le localisateur de travail, vous pouvez l'installer sur tous les sax de l'événement et de lire le dernier événement réussi
OriginalL'auteur peter.murray.rust
Vous pouvez juste attraper un
SaxException e
. Et puis d'appelere.toString()
Ça va donner quelque chose comme :
OriginalL'auteur alain.janinm