lazarus-ccr/components/iphonelazext/plistfile.pas
2010-01-20 13:26:25 +00:00

123 lines
3.0 KiB
ObjectPascal

{
*****************************************************************************
* *
* This file is part of the iPhone Laz Extension *
* *
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
}
unit PlistFile;
{$mode delphi}
interface
uses
Classes, SysUtils, DOM, XMLRead;
type
{ TPListFile }
TPListFile = class(TObject)
private
fFileName : String;
fDoc : TXMLDocument;
firstkey : TDOMNode;
protected
procedure ReadValues;
//todo: add "parent" for FindKeyNode
function FindKeyNode(const keyName: string): TDOMNode;
public
constructor Create(const AFileName: String);
destructor Destroy; override;
function GetStrValue(const Key: String): String;
end;
implementation
{ TPListFile }
constructor TPListFile.Create(const AFileName: String);
begin
fFileName := AFileName;
inherited Create;
end;
destructor TPListFile.Destroy;
begin
fDOC.Free;
inherited Destroy;
end;
function TPListFile.GetStrValue(const Key: String): String;
var
node : TDOMNode;
begin
Result:='';
node:=FindKeyNode(Key);
if not Assigned(node) then Exit;
node:=node.NextSibling;
if Assigned(node) and (node.NodeName='string') then
Result:=node.TextContent
else
Result:='';
end;
procedure TPListFile.ReadValues;
var
plist : TDOMNode;
begin
firstkey:=nil;
try
ReadXMLFile(fDoc, fFileName);
except
end;
if not Assigned(fDoc) then begin
fDoc:=TXMLDocument.Create;
Exit; // create an empty document
end;
try
plist:=fDoc.FindNode('plist');
if not Assigned(plist) then Exit;
while Assigned(plist) do begin
if (plist is TDOMElement) and (plist.NodeName='plist') and (plist.ChildNodes.Count>0) then
Break;
plist:=plist.NextSibling;
end;
firstkey:=plist.FindNode('dict');
if Assigned(firstkey) then
firstkey:=firstkey.FindNode('key');
except
firstkey:=nil;
end;
end;
function TPListFile.FindKeyNode(const keyName: string): TDOMNode;
begin
if not Assigned(fDoc) then ReadValues;
if not Assigned(firstkey) then begin
Result:=nil;
Exit;
end;
Result:=firstkey;
while Assigned(Result) do begin
if (Result.NodeName='key') and (Result.TextContent=keyName) then Exit;
Result:=Result.NextSibling;
end;
end;
end.