다음과 같은 Java 예외가 발생합니다.
java.net.MalformedURLException: no protocol
내 프로그램은 다음을 사용하여 XML 문자열을 구문 분석하려고합니다.
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
XML 문자열에는 다음이 포함됩니다.
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";
이 오류의 원인에 대한 제안 사항이 있습니까?
답변
설명서가 도움이 될 수 있습니다. http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
이 메소드 DocumentBuilder.parse(String)
는 URI를 가져 와서 열려고 시도합니다. 컨텐츠를 직접 제공하려면 컨텐츠를 InputStream
또는 Reader
로 지정해야합니다 (예 : a) StringReader
. … Java 표준 수준의 간접 참조에 오신 것을 환영합니다!
기본적으로 :
DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new StringReader(xml)));
파일에서 XML을 읽는 경우 File
객체에을 (를) 직접 제공 할 수 있습니다 DocumentBuilder.parse()
.
부수적으로, 이것은 Java에서 많이 접하게 될 패턴입니다. 일반적으로 대부분의 API는 문자열보다 스트림에서 더 많이 작동합니다. 스트림을 사용한다는 것은 잠재적으로 모든 콘텐츠를 동시에 메모리에로드 할 필요는 없다는 것을 의미합니다.
답변
대신 사용해보십시오 db.parse(xml)
:
Document doc = db.parse(new InputSource(new StringReader(**xml**)));