0

我试图读取 Xml 文件,但在整数或 WideString 类型上不断出现“将类型变体 (OleStr) 转换为整数类型时溢出”错误,我尝试将类型从 VarToStr、IntToStr、VarToWideStr 和 OleStrToString 更改。

xml 文件的示例

<product product-id="01126400000" product-group-id="10010877">
<name><![CDATA[Love-Positions]]></name>
<selling-price>6.95</selling-price>
<dicount-prohibited>0</dicount-prohibited>
<list-price>4.00</list-price>
<ean-code>4024144112647</ean-code>
<availability>1</availability>
<valid-from-date>19970623</valid-from-date>

procedure TForm1.Button1Click(Sender: TObject);
Var
MyXmlMax,MyXmlMin : integer;
Item: String;

begin

MyXmlMax := xmlDatafeed.Productlist.Count;
//item :=  (xmlDatafeedsub.Attributes['product-id']+','+ xmlDatafeedsub.Attributes['product-group-id'] );


for MyxmlMin := 1 to MyXmlMax-1 do begin
xmlDatafeedsub:=xmlDatafeed.Productlist[MyxmlMin];
memo1.lines.add('------');
memo1.lines.add(VarToStr(xmlDatafeedsub.Productid));  //Integer
memo1.lines.add(VarToStr(xmlDatafeedsub.Productgroupid)); //Integer
Memo1.Lines.Add(xmlDatafeedsub.Name);//WideString
memo1.lines.add((xmlDatafeedsub.Sellingprice)); //Integer
memo1.lines.add(VarToStr(XmlDataFeedSub.Dicountprohibited));//Integer
memo1.lines.add((xmlDatafeedsub.Listprice)); //Widestring
memo1.lines.Add(IntToStr(xmlDatafeedsub.Eancode));//Integer
memo1.lines.add(VarToStr(xmlDatafeedsub.Availability));//Integer
memo1.lines.add(VarToStr(xmlDatafeedsub.Validfromdate));//Integer
Inc(MyXmlMax,1);
memo1.lines.add('------');
end;   //end if
end;


//productdata_v2_01_01.xdb
`
function TXMLProductType.Get_Productid: Integer;
begin
  Result := AttributeNodes['product-id'].NodeValue;
end;

procedure TXMLProductType.Set_Productid(Value: Integer);
begin
  SetAttribute('product-id', Value);
end;

function TXMLProductType.Get_Productgroupid: Integer;
begin
  Result := AttributeNodes['product-group-id'].NodeValue;
end;

procedure TXMLProductType.Set_Productgroupid(Value: Integer);
begin
  SetAttribute('product-group-id', Value);
end;

function TXMLProductType.Get_Name: WideString;
begin
  Result := ChildNodes['name'].Text;
end;

procedure TXMLProductType.Set_Name(Value: WideString);
begin
  ChildNodes['name'].NodeValue := Value;
end;

function TXMLProductType.Get_Sellingprice: WideString;
begin
  Result := ChildNodes['selling-price'].Text;
end;

procedure TXMLProductType.Set_Sellingprice(Value: WideString);
begin
  ChildNodes['selling-price'].NodeValue := Value;
end;

function TXMLProductType.Get_Dicountprohibited: Integer;
begin
  Result := ChildNodes['dicount-prohibited'].NodeValue;
end;

procedure TXMLProductType.Set_Dicountprohibited(Value: Integer);
begin
  ChildNodes['dicount-prohibited'].NodeValue := Value;
end;

function TXMLProductType.Get_Listprice: WideString;
begin
  Result := ChildNodes['list-price'].Text;
end;

procedure TXMLProductType.Set_Listprice(Value: WideString);
begin
  ChildNodes['list-price'].NodeValue := Value;
end;

function TXMLProductType.Get_Eancode: Integer;
begin
  Result := ChildNodes['ean-code'].NodeValue;
end;

procedure TXMLProductType.Set_Eancode(Value: Integer);
begin
  ChildNodes['ean-code'].NodeValue := Value;
end;

function TXMLProductType.Get_Availability: Integer;
begin
  Result := ChildNodes['availability'].NodeValue;
end;

procedure TXMLProductType.Set_Availability(Value: Integer);
begin
  ChildNodes['availability'].NodeValue := Value;
end;

function TXMLProductType.Get_Validfromdate: Integer;
begin
  Result := ChildNodes['valid-from-date'].NodeValue;
end;

procedure TXMLProductType.Set_Validfromdate(Value: Integer);
begin
  ChildNodes['valid-from-date'].NodeValue := Value;
end;
4

1 回答 1

2

您的产品 ID 属性EAN Codes不是整数,但您正试图将它们视为整数。它们是字符串值。(它们太大而无法放入整数。)它们不是您可以对其进行数学或算术运算的数字,因此不要尝试将它们视为此类。将定义改为 a WideString,你应该没问题。

// You'll need to change these in the `interface` as well. Here are the EANCode
// conversions for you.
function TXMLProductType.Get_Eancode: WideString;
begin
  Result := ChildNodes['ean-code'].NodeValue;
end;

procedure TXMLProductType.Set_Eancode(Value: WideString);
begin
  ChildNodes['ean-code'].NodeValue := Value;
end;
于 2013-04-16T11:18:40.563 回答