gpt4 book ai didi

xml - Delphi XE2 中 'ADOM XML v4' 呈现的 WSDL XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:13:08 29 4
gpt4 key购买 nike

我一直在尝试使用 XE2 实现一个在 OSX(和 Windows)下运行的非常简单的网络服务,但似乎“ADOM XML v4”为网络服务生成/呈现的 XML 在某种程度上是无效的。

与使用“MSXML”生成的内容相比,我注意到的唯一明显区别是无论我尝试更改什么,编码似乎都设置为“UTF-16LE”。

有人遇到同样的问题并且知道如何解决吗?

更新:

重新创建它的最简单方法是创建一个简单的“SOAP 服务器应用程序”并将生成的 WebModuleUnit 更改为以下内容:

unit WebModuleUnit1;
interface
uses System.SysUtils, System.Classes, Web.HTTPApp, Soap.InvokeRegistry,
Soap.WSDLIntf, System.TypInfo, Soap.WebServExp, Soap.WSDLBind, Xml.XMLSchema,
Soap.WSDLPub, Soap.SOAPPasInv, Soap.SOAPHTTPPasInv, Soap.SOAPHTTPDisp,
Soap.WebBrokerSOAP, Xml.xmldom, Xml.adomxmldom;

type
TWebModule1 = class(TWebModule)
HTTPSoapDispatcher1: THTTPSoapDispatcher;
HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
WSDLHTMLPublish1: TWSDLHTMLPublish;
procedure WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
WebModuleClass: TComponentClass = TWebModule1;

implementation
{$R *.dfm}

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
WSDLHTMLPublish1.ServiceInfo(Sender, Request, Response, Handled);
end;

initialization
DefaultDOMVendor := 'ADOM XML v4';
// DefaultDOMVendor := 'MSXML';
end.

使用 DOMVendor 'MSXML' 服务可以工作,但使用 'ADOM XML v4' 它会崩溃。

将此添加到 QC 如果您觉得 OSX 上的 Web 服务很重要,请投票支持它。 http://qc.embarcadero.com/wc/qcmain.aspx?d=99412

最佳答案

您可以尝试在设置 XML 之前激活 XMLDocument...

让我们展示一下我的意思:

procedure TForm1.btn2Click(Sender: TObject);
var
s: string;
begin
xmldoc1.Active := False;
xmldoc1.XML.Text := '<root><child>value</child></root>';
xmldoc1.Active := True;
s := xmldoc1.XML.Text;
ShowMessage(s);
end;

procedure TForm1.btn3Click(Sender: TObject);
var
s: string;
begin
xmldoc1.Active := False;
xmldoc1.Active := True;
xmldoc1.XML.Text := '<?xml version="1.0" encoding="UTF-8"?>' + sLineBreak + '<root><child>value</child></root>';
s := xmldoc1.XML.Text;
ShowMessage(s);
end;

使用 btn2Click,我有: enter image description here使用 btn3Click,我有: enter image description here

因为我看到了第一个的 BOM,但第二个没有,我认为没问题...

如果对 TXMLDocument 上的节点进行任何插入/更新将其重置为 UTF-16LE,您仍然可以在导出 XML 之前替换第一行:

procedure TForm1.btn2Click(Sender: TObject);
var
s: string;
begin
xmldoc1.Active := False;
xmldoc1.XML.Text := '<root><child>value</child></root>';
xmldoc1.Active := True;
// do what you need

//before getting the xml
xmldoc1.XML[0] := '<?xml version="1.0" encoding="UTF-8"?>';
s := xmldoc1.XML.Text;
ShowMessage(s);
end;

关于xml - Delphi XE2 中 'ADOM XML v4' 呈现的 WSDL XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542148/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com