6 SysUtils, Classes, {SAX, SAXHelpers, SAXComps, SAXKW,}
7 GikoSystem, {XMLIntf, XMLDoc}{, HttpApp} GikoXMLDoc, YofUtils;
10 TAddressHistoryDM = class(TDataModule)
11 procedure DataModuleCreate(Sender: TObject);
16 // procedure SAXStartDocument(Sender: TObject);
17 // procedure SAXEndDocument(Sender: TObject);
18 // procedure SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString; const Atts: IAttributes);
19 // procedure SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
20 // procedure SAXCharacters(Sender: TObject; const PCh: SAXString);
23 procedure ReadHistory(sl: TStrings; ReadCount: Integer);
24 procedure WriteHistory(sl: TStrings; WriteCount: Integer);
28 AddressHistoryDM: TAddressHistoryDM;
33 ADDRESS_HISTORY_FILE_NAME = 'AddressHistory.xml';
37 procedure TAddressHistoryDM.DataModuleCreate(Sender: TObject);
42 procedure TAddressHistoryDM.ReadHistory(sl: TStrings; ReadCount: Integer);
47 HistoryNode: IXMLNode;
53 FReadCount := ReadCount;
55 FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
57 if FileExists(FileName) then begin
59 XMLDoc := LoadXMLDocument(FileName);
61 XMLNode := XMLDoc.DocumentElement;
63 if XMLNode.NodeName = 'address' then begin
64 for i := 0 to XMLNode.ChildNodes.Count - 1 do begin
65 HistoryNode := XMLNode.ChildNodes[i];
66 if HistoryNode.NodeName = 'history' then begin
67 if FReadCount >= sl.Count then begin
68 s := Trim(HistoryNode.Attributes['url']);
71 //sl.Add(HttpDecode(s));
83 // AddressSAXHandler.OnStartDocument := SAXStartDocument;
84 // AddressSAXHandler.OnEndDocument := SAXEndDocument;
85 // AddressSAXHandler.OnStartElement := SAXStartElement;
86 // AddressSAXHandler.OnStartElement := SAXStartElement;
87 // AddressSAXHandler.OnEndElement := SAXEndElement;
88 // AddressSAXHandler.OnCharacters := SAXCharacters;
90 // AddressSAXReader.Vendor := 'Keith Wood';
91 // AddressSAXReader.URL := FileName;
92 // AddressSAXReader.Parse;
95 procedure TAddressHistoryDM.WriteHistory(sl: TStrings; WriteCount: Integer);
98 SaveList: TStringList;
102 XMLDoc: IXMLDocument;
104 HistoryNode: IXMLNode;
108 XMLDoc := NewXMLDocument;
109 XMLDoc.Encoding := 'Shift_JIS';
110 XMLDoc.StandAlone := 'yes';
111 XMLNode := XMLDoc.AddChild('address');
113 FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
114 if sl.Count > WriteCount then
119 for i := 0 to Count - 1 do begin
120 HistoryNode := XMLNode.AddChild('history');
121 HistoryNode.Attributes['url'] := Trim(sl[i]);
123 XMLDoc.SaveToFile(FileName);
125 FileName := GikoSys.GetConfigDir + ADDRESS_HISTORY_FILE_NAME;
126 SaveList := TStringList.Create;
128 if sl.Count > WriteCount then
132 SaveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
133 SaveList.Add('<address>');
134 for i := 0 to Count - 1 do begin
135 SaveList.Add('<history url="' + HtmlEncode(Trim(sl[i])) + '"/>');
137 SaveList.Add('</address>');
138 SaveList.SaveToFile(FileName);
144 {procedure TAddressHistoryDM.SAXStartDocument(Sender: TObject);
149 procedure TAddressHistoryDM.SAXEndDocument(Sender: TObject);
154 procedure TAddressHistoryDM.SAXStartElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString;
155 const Atts: IAttributes);
159 if QName = 'history' then begin
160 if FReadCount >= FList.Count then begin
161 s := Atts.getValue('url');
162 if Trim(s) <> '' then
168 procedure TAddressHistoryDM.SAXEndElement(Sender: TObject; const NamespaceURI, LocalName, QName: SAXString);
173 procedure TAddressHistoryDM.SAXCharacters(Sender: TObject; const PCh: SAXString);