यह आपको एक अच्छी शुरुआत और विचार डोम का उपयोग कर देना चाहिए:
uses
MSHTML,
ActiveX,
ComObj;
procedure DocumentFromString(Document: IHTMLDocument2; const S: WideString);
var
v: OleVariant;
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := S;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
end;
function StripMultipleChar(const S: string; const C: Char): string;
begin
Result := S;
while Pos(C + C, Result) <> 0 do
Result := StringReplace(Result, C + C, C, [rfReplaceAll]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Document: IHTMLDocument2;
Elements: IHTMLElementCollection;
Element: IHTMLElement;
I: Integer;
Line: string;
begin
Document := CreateComObject(CLASS_HTMLDocument) as IHTMLDocument2;
DocumentFromString(Document, '<head>...'); // your HTML here
Elements := Document.all.tags('A') as IHTMLElementCollection;
for I := 0 to Elements.length - 1 do
begin
Element := Elements.item(I, '') as IHTMLElement;
Memo1.Lines.Add('A HREF=' + Element.getAttribute('HREF', 2));
Memo1.Lines.Add('A innerText=' + Element.innerText);
// Text is returned immediately before the element
Line := (Element as IHTMLElement2).getAdjacentText('beforeBegin');
// Line => "Mittwoch, 30. März 2011 12:01 <dir>" OR:
// Line => "Mittwoch, 9. Februar 2005 17:14 113"...
// I don't know what is the actual delimiter:
// It could be [space] or [tab] so we need to normalize the Line
// If it's tabs then it's easier because the timestamps also contains spaces
Line := Trim(Line);
Line := StripMultipleChar(Line, #32); // strip multiple Spaces sequences
Line := StripMultipleChar(Line, #9); // strip multiple Tabs sequences
// TODO: ParseLine (from right to left)
Memo1.Lines.Add(Line);
Memo1.Lines.Add('-------------');
end;
end;
आउटपुट:
A HREF=/SubDir/
A innerText=SubDir
Mittwoch, 30. März 2011 12:01 <dir>
-------------
A HREF=/file.txt
A innerText=file.txt
Mittwoch, 9. Februar 2005 17:14 113
-------------
संपादित करें:
मैंबदल गया हैकार्यान्वयन अधिक को सरलीकृत किया गया। फिर भी मैं पूर्व संस्करण को विश्वास करता हूं अनुकूलित करने के लिए अनुकूलित किया गया था। इस तथ्य पर विचार करते हुए कि रेखाएं लंबाई में बहुत कम हैं, प्रदर्शन में कोई अंतर नहीं होगा।
क्या आपके पास नमूना है? वास्तव में एक मानक "निर्देशिका सूची" नहीं है (वास्तव में, सर्वर पर निर्भर करता है और ओएस यह चल रहा है), और यह जानने के बिना कि आप किसके साथ काम कर रहे हैं, यह बताना मुश्किल है कि आप क्या कर सकते हैं करना पडेगा। –
जो आपको चाहिए वह एक HTML पार्सर है जो एक पेड़ बनाता है, इसलिए सभी "ए" टैग ढूंढना और आपकी आवश्यकताओं के अनुसार कार्य करना आसान होगा। – ComputerSaysNo
यदि सर्वर WebDAV का समर्थन करता है तो एक और मजबूत समाधान WebDAV क्लाइंट लाइब्रेरी के साथ कार्यान्वित करना आसान होगा। प्रत्येक सर्वर संस्करण अद्यतन या सॉफ़्टवेयर परिवर्तन इस HTML आउटपुट के लिए एक पार्सर विशिष्ट तोड़ देगा। – mjn