AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Knoten holen

Ein Thema von creehawk · begonnen am 2. Aug 2023 · letzter Beitrag vom 3. Aug 2023
 
mytbo

Registriert seit: 8. Jan 2007
483 Beiträge
 
#8

AW: XML Knoten holen

  Alt 3. Aug 2023, 15:44
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

Geändert von mytbo ( 4. Aug 2023 um 14:06 Uhr) Grund: Beschreibung der mORMot Funktionen hinzugefügt
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz