martes, 29 de enero de 2013

Omitir DTD en la lectura de un XML


Es posible que al intentar leer un fichero XML, en esta venga alguna directiva incluyendo el DTD, pero este DTD por algún motivo no sea accesible. En dicho caso nos encontramos en un problema por que el lector del XML no puede lanzar una excepción y para la lectura del mismo. Para ello muestro aquí como evitar este error con las dos formas que indique anteriormente de leer un fichero XML.

Usando la librería SAX, a la hora de crear la factoría le indicamos que omita cargar los DTD externos o valide el XML.
final SAXParserFactory spfac = SAXParserFactory.newInstance();
spfac.setFeature('http://apache.org/xml/features/nonvalidating/load-external-dtd', false);
spfac.setFeature('http://xml.org/sax/features/validation', false);
Usando XMLInputFactory, también le indicamos que omita los DTD a través de la instancia creada por la factoría.
final XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
Espero que os ayude. ;-)

No hay comentarios:

Publicar un comentario