Tengo dtd en el archivo y no puedo eliminarlo. Cuando trato de analizarlo en Java obtengo "Causado por: java.net.SocketException: la red es inalcanzable: connect", porque su dtd remoto. ¿Puedo desactivar de alguna manera la verificación dtd?cómo desactivar dtd en tiempo de ejecución en el xpath de java?
Respuesta
¿Debería poder especificar su propio EntityResolver, o usar características específicas de su analizador? Ver here para algunos enfoques.
Un ejemplo más completo:
<?xml version="1.0"?>
<!DOCTYPE foo PUBLIC "//FOO//" "foo.dtd">
<foo>
<bar>Value</bar>
</foo>
y XPath uso:
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class Main {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
System.out.println("Ignoring " + publicId + ", " + systemId);
return new InputSource(new StringReader(""));
}
});
Document document = builder.parse(new File("src/foo.xml"));
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
String content = xpath.evaluate("/foo/bar/text()", document
.getDocumentElement());
System.out.println(content);
}
}
Espero que esto ayude ...
he tenido este problema antes. Lo resolví descargando y almacenando una copia local de la DTD y luego validando contra la copia local. Necesita editar el archivo XML para apuntar a la copia local.
<!DOCTYPE root-element SYSTEM "filename">
Poco más información aquí: http://www.w3schools.com/dtd/dtd_intro.asp
creo que también se puede configurar manualmente una especie de validateOnParse propiedad a "falso" en su programa de análisis. Depende de qué biblioteca estés usando para analizar el XML.
Más información aquí: http://www.w3schools.com/dtd/dtd_validation.asp
Esto funcionó para mí:
SAXParserFactory saxfac = SAXParserFactory.newInstance();
saxfac.setValidating(false);
try {
saxfac.setFeature("http://xml.org/sax/features/validation", false);
saxfac.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
saxfac.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
saxfac.setFeature("http://xml.org/sax/features/external-general-entities", false);
saxfac.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
}
catch (Exception e1) {
e1.printStackTrace();
}
1 - Esta es la mejor respuesta aquí - sin embargo, es suficiente usar esta línea solamente: '' saxfac.setFeature ("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); '' –
- 1. desactivar el tiempo de ejecución datagridviewcombobox
- 2. Tiempo de ejecución de CPU en Java
- 3. condición de ejecución en XPath
- 4. Java: Extendiendo clase en tiempo de ejecución
- 5. Cargando jar en el tiempo de ejecución
- 6. Escaneo de anotaciones Java en el tiempo de ejecución
- 7. ¿Cómo medir el tiempo de ejecución del hilo de Java?
- 8. Agregar archivos a Java classpath en el tiempo de ejecución
- 9. ¿Cómo modificar el código de JavaScript en tiempo de ejecución?
- 10. Cómo establecer java.net.preferIPv4Stack = true en tiempo de ejecución?
- 11. XPath nodeset en Java
- 12. Rendimiento en tiempo de ejecución de reflexión de Java
- 13. Cómo cargar un archivo jar en el tiempo de ejecución
- 14. Obtiene el tiempo de ejecución de un subproceso Java
- 15. encontrar nuevas clases de Java en tiempo de ejecución
- 16. Deshabilitar el registro en Java en tiempo de compilación
- 17. compilador de clases java y compilación en tiempo de ejecución
- 18. Tiempo de ejecución en Ocaml
- 19. El tiempo máximo de ejecución en phpMyadmin
- 20. Mida el tiempo de ejecución en C#
- 21. ¿Cómo cambiar CurrentCulture en tiempo de ejecución?
- 22. ¿Cómo crear controles en tiempo de ejecución?
- 23. ¿Cómo cambiar AndroidManifest en tiempo de ejecución?
- 24. ¿Cómo cambias el tamaño de Fancybox en tiempo de ejecución?
- 25. Localización en tiempo de ejecución
- 26. Java Swing agregar/eliminar jButtons en tiempo de ejecución
- 27. Generar, compilar y usar código Java en tiempo de ejecución?
- 28. Java Instantiate clase en tiempo de ejecución con parámetros
- 29. En tiempo de ejecución, ¿cómo puedo limitar el número de subprocesos java
- 30. MySQLNonTransientConnectionException en el programa JDBC en tiempo de ejecución
Gracias, esto redujo alguna prueba de la unidad que estaba haciendo en un factor de 7. –