【发布时间】:2014-08-20 21:35:11
【问题描述】:
我们设法在服务器端生成日志..当我们传递的输入有宽字符串时,我们正在获取带有 & lt; 的 XML & gt;(not:-no space between characters) 而不是 ..Delphi 有什么办法限制这个吗?
甚至在 HTTPRIO1.BeforeExecute 中尝试过 StringReplace..
LDocument := NewXMLDocument;
LDocument.Active := True;
LDocument.Encoding := 'utf-8';
LDocument.Options := [doNodeAutoIndent];
ns := 'http://www.bank.com/dox/service/v1.0.0';
RootNode := LDocument.AddChild('AgreementSearchRequest');
RootNode.Attributes['xmlns:i'] := 'http://www.w3.org/2001/XMLSchema-instance';
RootNode.DeclareNamespace('', ns);
HeaderNode := RootNode.AddChild('Header', ns);
HeaderNode.AddChild('PageNo').Text := '1';
HeaderNode.AddChild('PageSize').Text := '10';
HeaderNode.AddChild('Source').Text := 'IFBD';
SearchCriteriaNode := RootNode.AddChild('SearchCriteria', ns);
SearchCriteriaNode.AddChild('AgreementId').Text := '5027222';
SearchCriteriaNode.AddChild('IsOffshoreUser').Text := 'true';
BankLegalNode := SearchCriteriaNode.AddChild('BankLegalEntities');
LegalNode := BankLegalNode.AddChild('BankLegalEntity');
LegalNode.AddChild('GCRS').Text := 'Search LEgal Entity';
LegalNode.AddChild('BankLegalEntityName').Text :=
'Search Legal Entity Category';
DocSearchOut := SearchArgsResponse.Create();
DoxSerchIn := SearchArgs.Create();
DoxSerchIn.SearchArgs := LDocument.DocumentElement.XML;
DoxService := GetIDoxService(True,'',HTTPRIO1);
DocSearchOut :=DoxService.SearchAgreements(DoxSerchIn)
在执行之前尝试转换,但是当它将字符串转换为流时
procedure TFormDelegate.HTTPRIO1BeforeExecute(const MethodName: string;
SOAPRequest: TStream);
var
StrStrm : TStringStream;
xml,xml1,xml2: TStringList;
begin
ShowMessage(MethodName);
Memo1.Clear;
StrStrm := TStringStream.Create();
xml := TStringList.Create;
xml1 := TStringList.Create;
xml2 := TStringList.Create;
try
xml.Text := StreamToString(SOAPRequest);
xml2.Text := StringReplace(xml.Text,'<','<', [rfReplaceAll, rfIgnoreCase]);
xml1.Text := StringReplace(xml2.Text,'>','>', [rfReplaceAll, rfIgnoreCase]);
xml2.Text := StringReplace(xml1.Text,'<parameters>','', []);
xml1.Text := StringReplace(xml2.Text,'</parameters>','', []);
xml1.SaveToFile('response1.xml');
//SOAPRequest := StringToStream(xml1.Text);
SOAPRequest:= StringToStream(xml1.Text);
except
xml.Free;
xml1.Free;
xml2.Free;
StrStrm.Free;
end;
Memo1.Lines.Append(StreamToString(SOAPRequest));
end;
服务器端日志..
<SOAP-ENV:Body>
<SearchAgreements xmlns="http://www.bank.com/dox/service/v1.0.0">
<parameters>
<searchRequest><AgreementSearchRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.bank.com/dox/service/v1.0.0"& gt;
& lt;Header>
& lt;PageNo>1& lt;/PageNo>
& lt;PageSize>10& lt;/PageSize>
& lt;Source>IFBD&l t;/Source>
& lt;/Header>
& lt;SearchCriteria& gt;
& lt;AgreementId& gt;5027222& lt;/AgreementId& gt;
& lt;IsOffshoreUser& gt;true</IsOffshoreUser& gt;
& lt;bankLegalEntities>
& lt;bankLegalEntity& gt;
& lt;GCRS>Search LEgal Entity</GCRS>
& lt;bankLegalEntityName>Search Legal Entity Category& lt;/bankLegalEntityName& gt;
& lt;/bankLegalEntity& gt;
& lt;/bankLegalEntities>
& lt;/SearchCriteria& gt;
& lt;/AgreementSearchRequest& gt;</searchRequest>
</parameters>
</SearchAgreements>
</SOAP-ENV:Body>
【问题讨论】:
-
如果你想将 XML 作为一个更大的 XML 文档中的元素值发送,你需要使用
<![CDATA[Your XML Data]]>tag 告诉解析器不要解析数据块。
标签: xml web-services delphi delphi-2010