这是我的Xml
<Cars>
<Car id="1" name="Opel" picture="\File\JPEG\opel.jpg" />
<Car id="2" name="Ford" picture="\File\JPEG\ford.jpg" />
<Car id="3" name="Volvo" picture="\File\JPEG\volvo.jpg" />
</Cars>
现在我想添加新车
Listbox1 Listbox2
(CarName) (Car.Picture)
BMW \File\JPEG\bmw.jpg
Mercedes \File\JPEG\Merdedes.jpg
我有车的问题。爱。每个ID必须唯一(+1) 文件中已有3辆汽车如何让其他车辆成为+1
我的代码
var
lNewCar: IXMLCarType;
i, NewID : Integer;
begin
i:= 0;
NewID := 1 + MaxID (Form1.Memo1.Lines.Text);
while ( i < ListBox1.Count) and ( i < ListBox2.Count)
begin
lNewCar := XMLIntf.Cars.add;
lNewCar.id := NewID;
lNewCar.name := Listbox1.Items[i];
lNewCar.jpeg := Listbox2.Items[i];
Inc(i);
end;
end;
答案 0 :(得分:2)
鉴于XML的简单结构,只有Car
根节点下面的一系列Cars
节点,您可以通过迭代{{}找到最大的现有id
属性值{1}}节点并检查其Car
属性,如下所示:
示例项目:
id
您需要将XML文档作为字符串传递给此type
TForm1 = class(TForm)
Memo1: TMemo;
btnMaxId: TButton;
procedure btnMaxIdClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
public
end;
function MaxId(const XML : String) : Integer;
[...]
var
Form1: TForm1;
implementation
[...]
procedure TForm1.btnMaxIdClick(Sender: TObject);
begin
ShowMessage(IntToStr(MaxID(Memo1.Lines.Text)));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add('<Cars>');
Memo1.Lines.Add(' <Car id="1" name="Opel" picture="\File\JPEG\opel.jpg" />');
Memo1.Lines.Add(' <Car id="98" name="Ford" picture="\File\JPEG\ford.jpg" />');
Memo1.Lines.Add(' <Car id="3" name="Volvo" picture="\File\JPEG\volvo.jpg" />');
Memo1.Lines.Add('</Cars>');
end;
function MaxId(const XML : String) : Integer;
var
XmlDoc: IXMLDOMDocument;
NodeList : IXmlDOMNodeList;
Node : IXMLDomNode;
i : Integer;
ID : Integer;
ErrorCode : Integer;
S : String;
begin
Result := 0;
XmlDoc := CoDOMDocument.Create;
try
XmlDoc.Async := False;
XmlDoc.LoadXml(XML);
NodeList := XmlDoc.DocumentElement.childNodes;
for i := 0 to NodeList.Length - 1 do begin
Node := NodeList.item[i];
S := Node.attributes.GetNamedItem('id').nodeValue;
Val(S, ID, ErrorCode);
if ErrorCode = 0 then begin
if ID > Result then
Result := ID;
end;
end;
finally
XmlDoc := Nil;
end;
end;
end.
函数。因此,如果q中的XML位于表单上的TMemo组件中,您可以像这样使用它:
MaxID
有一种更直接的方法来获取属性的最大值,例如, How to find the max attribute from an XML document using Xpath 1.0
但是这需要熟悉XPath查询,你需要注意它对于获取多字符var
NewID : integer;
begin
NewID := 1 + MaxID (Form1.Memo1.Lines.Text);
lNewExpression.id := NewID;
的最大值的说法。