2008-12-05 11 views
2

J'ai ce code:Impossible d'analyser le fichier XML à l'aide DocumentBuilder

if (file.exists()) { 
    Document doc = builder.parse(file); 
    NodeList list = doc.getElementsByTagName("property"); 
    System.out.println("XML Elements: "); 
    for (int ii = 0; ii < list.getLength(); ii++) { 

ligne 2 donne exception suivante

 
E:\workspace\test\testDomain\src\com\test\ins\nxg\maps\Right.hbm.xml 
...***java.net.SocketException: Operation timed out: connect:could be due to invalid address 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:372) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:233) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:220) 

Répondre

9

Parhaps le DocumentBuilder tente d'accéder sans succès une DTD via une prise réseau pour votre Document XML?

S'il existe des références DTD dans le document XML, essayez de les modifier pour en prouver la cause.

Si cela résout votre problème, je pense que vous pouvez utiliser un EntityResolver pour une solution plus permanente, mais je ne l'ai pas fait moi-même.

+1

La solution EntityResolver est ici: http://stackoverflow.com/questions/243728/ – Tomalak

0

Essayez de simplifier votre problème.

Pouvez-vous obtenir le code, vous devez analyser, manuellement?

Si oui, essayez de l'analyser. Je ne pense pas que ce soit le problème de votre DocumentBuilder mais votre connexion réseau. Donc, vous devez vous assurer que DocumentBuilder est capable d'accéder à chaque bit du document XML.

Si votre document stocké manuellement échoue lors de sa validation, il y aura un message d'erreur différent.

Espérons que ça aide.

0

Avez-vous créé une nouvelle instance de DocumentBuilderFactory, puis créé un nouveau documentDocumentBuilder avant d'analyser le fichier?

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(file); 

Espérons que cette link aide. Cela m'a définitivement aidé plus tôt aujourd'hui.

0

La réponse de Brabster est très utile pour moi. Dans mon cas, j'ai un document XML commençant par

<?xml version="1.0"?> <!DOCTYPE GBSet PUBLIC "-//NCBI//NCBI GBSeq/EN" http://www.ncbi.nlm.nih.gov/dtd/NCBI_GBSeq.dtd"> ... more to come 

Cela a causé un problème pour DocumentBuilder. J'ai un problème de temps mort. Le vrai mal est dans le contenu de l'URL: http://www.ncbi.nlm.nih.gov/dtd/NCBI_GBSeq.dtd:

<!-- ============================================ 
::DATATOOL:: Generated from "gbseq.asn" 
::DATATOOL:: by application DATATOOL version 1.5.0 
::DATATOOL:: on 06/06/2006 23:03:48 
============================================ --> 

<!-- NCBI_GBSeq.dtd 
This file is built from a series of basic modules. 
The actual ELEMENT and ENTITY declarations are in the modules. 
This file is used to put them together. 
--> 

<!ENTITY % NCBI_Entity_module PUBLIC "-//NCBI//NCBI Entity Module//EN" 
"NCBI_Entity.mod.dtd"> %NCBI_Entity_module; 

<!ENTITY % NCBI_GBSeq_module PUBLIC "-//NCBI//NCBI GBSeq Module//EN" "NCBI_GBSeq.mod.dtd"> %NCBI_GBSeq_module; 

Après la suppression

<!DOCTYPE GBSet PUBLIC "-//NCBI//NCBI GBSeq/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_GBSeq.dtd"> 

Mon programme peut au moins aller de l'avant!

Questions connexes