2011-08-30 50 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);