So geht's..... als MischMasch aus
XML und Strings.
Hast du die Wahl des Datenformats? JSON lässt sich einfacher verarbeiten. Wenn die Struktur nicht kompliziert ist, dann kannst du das
XML auch einfach parsen:
Delphi-Quellcode:
function FindBuildingGUID(pmXMLStream: TStream;
const pmcSearchBuilding:
String):
String;
overload;
begin
Result := '
';
if pmXMLStream =
Nil then Exit;
//=>
if pmcSearchBuilding = '
'
then Exit;
//=>
var xmlSize: Int64 := pmXMLStream.Size;
if (xmlSize > 0)
and (xmlSize < High(NativeInt))
then
begin
var parser: TParser := TParser.Create(pmXMLStream);
try
var runGUID:
String;
while parser.SourcePos < xmlSize
do
begin
if parser.Token = '
<'
then
begin
parser.NextToken;
if parser.Token = '
/'
then
begin
repeat
parser.NextToken;
until parser.Token = '
>';
end
else if parser.TokenSymbolIs('
GUID')
then
begin
parser.NextToken;
// '>' closing tag
parser.NextToken;
// XML tag value
runGUID := parser.TokenString;
end
else if parser.TokenSymbolIs('
BUILDING')
then
begin
parser.NextToken;
// '>' closing tag
parser.NextToken;
// XML tag value
if SameText(parser.TokenString, pmcSearchBuilding)
then
Exit(runGUID);
//=>
end;
end;
parser.NextToken;
end;
finally
parser.Free;
end;
end;
end;
function FindBuildingGUID(
const pmcXMLData, pmcSearchBuilding:
String):
String;
overload;
begin
Result := '
';
if pmcXMLData = '
'
then Exit;
//=>
if pmcSearchBuilding = '
'
then Exit;
//=>
var stream: TStringStream := TStringStream.Create(pmcXMLData);
try
Result := FindBuildingGUID(stream, pmcSearchBuilding);
finally
stream.Free;
end;
end;
// Functions AnyTextFileToString, MakePath are from mORMot library.
// Required Units: mormot.core.text, mormot.core.unicode, mormot.core.os
begin
var xml:
String := AnyTextFileToString(MakePath([Executable.ProgramFilePath, '
daten.xml']));
ShowMessage(Format('
GUID: %s', [FindBuildingGUID(
xml, '
134614')]));
Lösung ohne Gewähr. Die Funktion
AnyTextFileToString beachtet das Format und konvertiert, wenn es notwendig ist.
MakePath verkettet zu einem Pfad unter Berücksichtigung des
OS. TExecutable ist eine Datenstruktur (Record) mit nützlichen Variablen zur sofortigen Verwendung.
Bis bald...
Thomas