java.net.MalformedURLException:没有协议

我得到的Javaexception像:

java.net.MalformedURLException: no protocol 

我的程序试图parsing一个XMLstring,使用:

 Document dom; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); dom = db.parse(xml); 

XMLstring包含:

 String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ " <s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ " <s:Header>"+ " <ActivityId CorrelationId=\"15424263-3c01-4709-bec3-740d1ab15a38\" xmlns=\"http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics\">50d69ff9-8cf3-4c20-afe5-63a9047348ad</ActivityId>"+ " <clalLog_CorrelationId xmlns=\"http://clalbit.co.il/clallog\">eb791540-ad6d-48a3-914d-d74f57d88179</clalLog_CorrelationId>"+ " </s:Header>"+ " <s:Body>"+ " <ValidatePwdAndIPResponse xmlns=\"http://tempuri.org/\">"+ " <ValidatePwdAndIPResult xmlns:a=\"http://schemas.datacontract.org/2004/07/ClalBit.ClalnetMediator.Contracts\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+ " <a:ErrorMessage>Valid User</a:ErrorMessage>"+ " <a:FullErrorMessage i:nil=\"true\" />"+ " <a:IsSuccess>true</a:IsSuccess>"+ " <a:SecurityToken>999993_310661843</a:SecurityToken>"+ " </ValidatePwdAndIPResult>"+ " </ValidatePwdAndIPResponse>"+ " </s:Body>\n"+ " </s:Envelope>\n"; 

有什么build议是什么导致这个错误?

该文档可以帮助您: http : //java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

DocumentBuilder.parse(String)方法接受一个URI并尝试打开它。 如果你想直接给内容,你必须给它一个InputStream ,例如一个ByteArrayInputStream 。 欢迎来到Java标准的间接指针级别!

基本上:

 DocumentBuilder db = ...; String xml = ...; db.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8")))); 

请注意,如果您从文件中读取XML,则可以直接将File对象提供给DocumentBuilder.parse()

作为一个方面说明,这是一个模式,你会在Java中遇到很多。 通常,大多数API使用Streams而不是Strings。 使用stream意味着可能不是所有的内容都必须同时加载到内存中,这可能是一个好主意!

试试而不是db.parse(xml)

 Document doc = db.parse(new InputSource(new StringReader(**xml**)));