program xmlRow;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils, Classes;
procedure SplitXmlAttributes(
const AXmlRow :
string;
out ATag :
string; AAttributes : TStrings );
var
LXmlInner :
string;
LValueList : TStringList;
begin
// 1. Zeichen ("<") entfernen
LXmlInner := Copy( Trim( AXmlRow ), 2 );
// letzen beiden Zeichen ("/>") entfernen und Leerstellen vorne/hinten entfernen
LXmlInner := Trim( Copy( LXmlInner, 1, Length( LXmlInner ) - 2 ) );
LValueList := TStringList.Create;
try
LValueList.Delimiter := '
';
LValueList.StrictDelimiter := True;
LValueList.DelimitedText := LXmlInner;
// Der Tag steht an erster Stelle
ATag := LValueList[0];
LValueList.Delete( 0 );
// Der Rest sind die Attribute
AAttributes.Assign( LValueList );
finally
LValueList.Free;
end;
end;
procedure Test;
var
LXmlRow :
string;
LXmlTag :
string;
LXmlAttr : TStrings;
LIdx : Integer;
begin
LXmlAttr := TStringList.Create;
try
LXmlRow := '
<line x1="100" y1="400" x2="500" y2="400" stroke="black" stroke-width="1" />';
SplitXmlAttributes( LXmlRow, LXmlTag, LXmlAttr );
Writeln( '
Tag: ', LXmlTag );
for LIdx := 0
to Pred( LXmlAttr.Count )
do
Writeln( LXmlAttr.Names[LIdx], '
= ', LXmlAttr.ValueFromIndex[LIdx] );
finally
LXmlAttr.Free;
end;
end;
begin
try
Test;
except
on E :
Exception do
Writeln( E.ClassName, '
: ', E.
Message );
end;
ReadLn;
end.