Невозможно проанализировать файл XML с помощью DocumentBuilder - PullRequest
2 голосов
/ 05 декабря 2008

У меня есть этот код:

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++) {

строка 2 дает следующее исключение

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)

Ответы [ 4 ]

9 голосов
/ 05 декабря 2008

Возможно, DocumentBuilder безуспешно пытается получить доступ к DTD через сетевой сокет для вашего XML-документа?

Если в документе XML есть ссылки на DTD, попробуйте отредактировать их, чтобы доказать причину.

Если это решит вашу проблему, я думаю, вы можете использовать EntityResolver для более постоянного решения, но я сам этого не сделал.

1 голос
/ 16 сентября 2014

Ответ Брабстера очень полезен для меня. В моем случае у меня есть XML-документ, начинающийся с

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

Это вызвало проблему для DocumentBuilder. У меня проблема с тайм-аутом. Истинное зло в содержании 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;

После удаления

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

Моя программа может, по крайней мере, двигаться вперед!

0 голосов
/ 10 декабря 2008

Вы создали новый экземпляр DocumentBuilderFactory, а затем создали новыйDocumentBuilder, прежде чем анализировать файл?

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

Надеюсь, эта ссылка поможет. Это определенно помогло мне сегодня раньше.

0 голосов
/ 05 декабря 2008

Попробуйте упростить вашу проблему.

Можете ли вы получить код, который вам нужно проанализировать, вручную?

Если да, попробуйте разобрать его. Я не думаю, что это проблема вашего DocumentBuilder, но ваше сетевое подключение. Поэтому вы должны убедиться, что DocumentBuilder имеет доступ к каждому биту документа XML.

Если при сохранении документа, сохраненного вручную, произойдет сбой, появится другое сообщение об ошибке.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...