Delphi的语法问题例子程序见附件,用Delphi 7进行编译问题代码为Delphi(Pascal) codeif Node.ChildNodes
Delphi的语法问题
例子程序见附件,用Delphi 7进行编译
问题代码为
Delphi(Pascal) codeif Node.ChildNodes <> nil then begin for i := 0 to Node.ChildNodes.Count - 1 do begin cNode := Node.ChildNodes.Get(i); shapetype := cNode.NodeName; if (shapeType = 'line') then begin shape := TLine.Create; shape.ShapeType := shapetype; shape.Name := cNode.AttributeNodes.Nodes['name'].NodeValue; TLine(shape).X1 := cNode.AttributeNodes.Nodes['x1'].NodeValue; TLine(shape).Y1 := cNode.AttributeNodes.Nodes['y1'].NodeValue; TLine(shape).X2 := cNode.AttributeNodes.Nodes['x2'].NodeValue; TLine(shape).Y2 := cNode.AttributeNodes.Nodes['y2'].NodeValue; try TLine(shape).Color := StringToColor(cNode.AttributeNodes.Nodes['color'].NodeValue); except TLine(shape).Color := ClBlue; end; end else if (shapeType = 'rectangle') then begin shape := TRectangle.Create; shape.ShapeType := shapetype; shape.Name := cNode.AttributeNodes.Nodes['name'].NodeValue; TRectangle(shape).X1 := cNode.AttributeNodes.Nodes['x1'].NodeValue; TRectangle(shape).Y1 := cNode.AttributeNodes.Nodes['y1'].NodeValue; TRectangle(shape).X2 := cNode.AttributeNodes.Nodes['x2'].NodeValue; TRectangle(shape).Y2 := cNode.AttributeNodes.Nodes['y2'].NodeValue; try Trectangle(shape).Color := StringToColor(cNode.AttributeNodes.Nodes['color'].NodeValue); except Trectangle(shape).Color := ClAqua; end; end
[解决办法]if Node.ChildNodes <> nil then
begin
for i := 0 to Node.ChildNodes.Count - 1 do
begin
cNode := Node.ChildNodes.Get(i);
shapetype := cNode.NodeName;
if (shapeType = 'line ') then
begin
shape := TLine.Create;
shape.ShapeType := shapetype;
shape.Name := cNode.AttributeNodes.Nodes[ 'name '].NodeValue;
TLine(shape).X1 := cNode.AttributeNodes.Nodes[ 'x1 '].NodeValue;
TLine(shape).Y1 := cNode.AttributeNodes.Nodes[ 'y1 '].NodeValue;
TLine(shape).X2 := cNode.AttributeNodes.Nodes[ 'x2 '].NodeValue;
TLine(shape).Y2 := cNode.AttributeNodes.Nodes[ 'y2 '].NodeValue;
try
TLine(shape).Color := StringToColor(cNode.AttributeNodes.Nodes[ 'color '].NodeValue);
except
TLine(shape).Color := ClBlue;
end;
end
else if (shapeType = 'rectangle ') then
begin
shape := TRectangle.Create;
shape.ShapeType := shapetype;
//注意这里
if VarIsNull(cNode.AttributeNodes.Nodes[ 'name '].NodeValue) then
shape.name = ' ';
else
shape.Name := cNode.AttributeNodes.Nodes[ 'name '].NodeValue;
TRectangle(shape).X1 := cNode.AttributeNodes.Nodes[ 'x1 '].NodeValue;
TRectangle(shape).Y1 := cNode.AttributeNodes.Nodes[ 'y1 '].NodeValue;
TRectangle(shape).X2 := cNode.AttributeNodes.Nodes[ 'x2 '].NodeValue;
TRectangle(shape).Y2 := cNode.AttributeNodes.Nodes[ 'y2 '].NodeValue;
try
Trectangle(shape).Color := StringToColor(cNode.AttributeNodes.Nodes[ 'color '].NodeValue);
except
Trectangle(shape).Color := ClAqua;
end;
end
错误信息为不能转换Null值为string类型。
使用VarIsNull判断是否为空,注意uses Variants
------解决方案--------------------