无法使用DocumentBuilder解析XML文件

时间:2008-12-05 10:08:54

标签: java xml parsing

我有这段代码:

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 个答案:

答案 0 :(得分:9)

或许DocumentBuilder尝试通过XML文档的网络套接字访问DTD失败了吗?

如果XML文档中有DTD引用,请尝试编辑它们以证明原因。

如果这样可以解决您的问题,我认为您可以使用EntityResolver获得更持久的解决方案,但我自己并没有这样做。

答案 1 :(得分:1)

Brabster的回答对我很有帮助。在我的例子中,我有一个以

开头的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">

我的计划至少可以继续前进!

答案 2 :(得分:0)

尝试简化您的问题。

你能获得代码,你必须手动解析吗?

如果是,请尝试解析它。我不认为这是你的DocumentBuilder的问题,而是你的网络连接。因此,您必须确保DocumentBuilder能够访问xml文档的每个位

如果手动存储的文档在验证时失败,则会显示不同的错误消息。

希望它有所帮助。

答案 3 :(得分:0)

您是否在解析文件之前创建了DocumentBuilderFactory的新实例然后创建了一个newDocumentBuilder?

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

希望link有所帮助。这对我今天早些时候肯定有帮助。