我有这段代码:
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)
答案 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有所帮助。这对我今天早些时候肯定有帮助。