SOAP 웹 서비스의 응답을 구문 분석하려고하지만 데이터의 일부에 잘못된 xmlns 요소가 있기 때문에 문제가 발생하지 않습니다.Delphi - IXMLNode의 잘못된 네임 스페이스 URI
내가 작업하고있는 XML의 일부는 다음과 같습니다.
<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<ResponseData xmlns="http://www.example.com/WebServices/Schemas/1">
<ResponseDataResult>
<Messages xmlns="http://www.example.com/WebServices/Schemas/2">
<Message>...</Message>
</Messages>
</ResponseDataResult>
...
</ResponseData>
</soap:Body>
비누의 XMLNS URI : 바디 노드가 OK이고, 무효 인 드 responseData에있는 그것의 하나는, 그것은 전혀 존재하지 않는 문서를 가리 킵니다. 웹 서비스 그래서이 질문 :(를 벗어 고정 내 통제하에 아니라는 것을 주목해야한다.
내 델파이 (2007) 코드 모양을, 현재,이 같은 것을.
var l_tmp,l_tmp2,FSOAPBody:IXMLNode;
begin
...
FSOAPBody := FSOAPEnvelope.ChildNodes.FindNode('Body','http://schemas.xmlsoap.org/soap/envelope/');
//returns the xml above.
if (FSOAPBody = nil) then exit;
l_tmp := FSOAPBody.ChildNodes.FindNode('ResponseData','');
if (l_tmp = nil) or (not l_tmp.HasChildNodes) then exit;
l_tmp2 := l_tmp.ChildNodes.FindNode('ResponseDataResult','');
...
end;
위의 코드에서는 빈 이름 공간 URL을 FindNode('ResponseData','')
코드에 추가해야만했습니다. 아무 것도 찾지 못하고 nil을 반환하지만 예상 XML을 다시 가져옵니다.
문제는 다음 찾기 노드 (ChildNodes.FindNode('ResponseDataResult','')
)는 l_tmp의 ChildNodes에 액세스하려고 할 때 액세스 위반을 일으키며 다음을 사용하여 xml을 볼 수 있습니다. l_tmp.xml 그리고 기대하는 XML인지 확인하십시오.
필자는 네임 스페이스가 누락 된 것으로 판단하여이를 제거하려고 시도했지만 읽기 전용 속성이라는 오류가 더 많이 발생합니다.
어쨌든 xmlns 속성을 제거하거나 NS에 관계없이 노드를 선택 하시겠습니까? 또는 나는이 잘못에 대하여 가고 있는가?