gpt4 book ai didi

Delphi XML 解析和 EVariantTypeCastError

转载 作者:行者123 更新时间:2023-12-01 20:21:56 25 4
gpt4 key购买 nike

我正在开发一个应用程序,用于保存和读取 XML 首选项。当我添加新功能时,我当然还添加了配置这些功能的功能,但我发现当我的代码尝试从 XML 中读取尚不存在的变量时会崩溃。当发生这种情况时,任何应该读取的后续变量都不会被读取,使我失去了一些偏好。将此代码作为示例:

  xmldoc := TXMLDocument.Create(nil);
Try
xmldoc.LoadFromFile('c:\myxml.xml');
xmldoc.Active := True;

if xmldoc.ChildNodes.Count >= 1 then
Begin
Control := Root.ChildNodes.FindNode('Control');
if Assigned(Control) then
Begin
Username.Text := Control.Attributes['Username'];
Password.Text := Control.Attributes['Password'];
AutoValidate.Checked := Control.Attributes['AutoValidate'];
AutoIRC.Checked := Control.Attributes['AutoIRC'];
Passive.Checked := Control.Attributes['Passive'];
DoNothing.Checked := Control.Attributes['DoNothing'];
OpenPage.Checked := Control.Attributes['OpenPage'];
DownloadUsingBrowser.Checked := Control.Attributes['DownloadUsingBrowser'];
RSSFeed.Checked := Control.Attributes['RSSFeed'];
SaveToFolder.Checked := Control.Attributes['SaveToFolder'];
SaveToFTP.Checked := Control.Attributes['SaveToFTP'];
SavePath.Text := Control.Attributes['SavePath'];
FTPPath.Text := Control.Attributes['FTPPath'];
End;
End;
Finally
xmldoc.Active := False;
End;

假设我刚刚在“AutoValidate”中添加了一个选项 - XML 文件没有此属性,因为它尚未由应用程序保存,但应用程序仍尝试在以下情况下读取此属性:它启动(读取首选项)。

如何获得它,以便丢失的属性不会引发旧的“异常类 EVariantTypeCastError 并显示消息“无法将类型(Null)的变体转换为类型(Boolean)””

最佳答案

您应该首先测试属性的值。您可以创建一个实用函数,例如像这样:

function xmlGetBoolAttrValue(ANode:iXMLNode; const AName:String; ADefault:boolean): boolean;
var
V: variant;
begin
Result := ADefault;
if not Assigned(ANode) then
exit;
V := ANode.Attributes[AName];
if VarIsNull(V) then
exit;
Result := V;
end;

并使用它

SaveToFTP.Checked := xmlGetBoolAttrValue(Control, 'SaveToFTP', false);

关于Delphi XML 解析和 EVariantTypeCastError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17276541/

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