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**)));