Delphi DLL
Delphi DLL
Demonstrate XML SearchForTag2
Demonstrates how to use SearchForTag2.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StringBuilder, Xml;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
xml: HCkXml;
i: Integer;
xmlSearch: HCkXml;
afterPtr: HCkXml;
pTemp: HCkXml;
sbState: HCkStringBuilder;
begin
success := False;
xml := CkXml_Create();
// Load the following XML:
// <Test>
// <testchild1>
// test
// </testchild1>
// <testchild1>
// test1
// </testchild1>
// <testchild1>
// test2
// </testchild1>
// <testchild1>
// test3
// </testchild1>
// <testchild1>
// test4
// </testchild1>
// <testchild1>
// test5
// </testchild1>
// <testchild1>
// test6
// </testchild1>
// </Test>
success := CkXml_LoadXml(xml,'<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>');
i := 0;
xmlSearch := CkXml_GetRoot(xml);
afterPtr := CkXml_GetRoot(xml);
// Alway begin the search from the root.
while CkXml_SearchForTag2(xmlSearch,afterPtr,'testchild1') do
begin
// If successful, xmlSearch now points to the found element.
i := i + 1;
// Set afterPtr = xmlSearch (so we find the next match after the one we just found)
// Rest xmlSearch to the root of the XML tree to be searched.
Memo1.Lines.Add(IntToStr(i) + ': ' + CkXml__content(xmlSearch));
pTemp := afterPtr;
afterPtr := xmlSearch;
CkXml_GetRoot2(pTemp);
xmlSearch := pTemp;
end;
CkXml_Dispose(xmlSearch);
CkXml_Dispose(afterPtr);
Memo1.Lines.Add('----');
// A better way:
sbState := CkStringBuilder_Create();
i := 0;
while CkXml_NextInTraversal2(xml,sbState) <> False do
begin
if (CkXml_TagEquals(xml,'testchild1') = True) then
begin
Memo1.Lines.Add(IntToStr(i) + ': ' + CkXml__content(xml));
i := i + 1;
end;
end;
CkXml_GetRoot2(xml);
CkXml_Dispose(xml);
CkStringBuilder_Dispose(sbState);
end;