例子程序见附件,用Delphi 7进行编译问题代码为 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;
        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

解决方案 »

  1.   

    VarToStr(cNode.AttributeNodes.Nodes['y2'].NodeValue);所有是 str := variant类似的都像上面那样.
      

  2.   


    对不起,在这样做以后,显示如此的错误信息[错误] Facilities.pas(80): Incompatible types: 'Integer' and 'String'
      

  3.   


    主要是空字符处理出问题了
    不知道你变量类型,如果是整型转字符出问题,可以用strtointdef函数,+def的函数带有错误处理
      

  4.   

    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