2011-08-30 112 views
3

我用JDOM与SAXBuilder的解析XML文件,我有这是引发此错误的文件的问题:未知协议:C(JDOM一个SAXBuilder的)

java.net.MalformedURLException: unknown protocol: c 
    at java.net.URL.<init>(URL.java:574) 
    at java.net.URL.<init>(URL.java:464) 
    at java.net.URL.<init>(URL.java:413) 
    at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) 
    at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source) 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518) 
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:986) 
    at com.foo.moo.MyClass.getValues(MyClass.java:321) 

而行是:

Document document = null; 
document = sxb.build(files.elementAt(i)); // This one 

经过对互联网的一些研究,我认为这个错误与Java 1.6有关。

您认为如何?

+1

你能发布导致问题的XML? – beny23

回答

10

我的第一个猜测是,你加载本地文件,如: “C:/mylocalfile.xml”

但此URL不包含协议,如http://ftp://file://

尝试file:// c:/mylocalfile.xml

+1

同意。你可以尝试类似'if(myUrl.getProtocol()。equals(“c”)){myUrl = new URL(“file://”+ myUrl.toexternalform())}' – MrDrews

4

实际上,我的文件夹名称中有空格导致了此错误。即使在本地文件的情况下,JAVA也具有理解协议类型的能力。

+0

是的,正如OP提到的,这似乎只在Java 1.6及更高版本中才有问题。 – zEro

0

我在文件名有空间

我解决它使用一个InputStream,而不是文件名:

作品:

fis = new FileInputStream(filename); 
Document doc = new SAXBuilder().build(fis); 

崩溃:

Document doc = new SAXBuilder().build(filename);