...
tag oder direkt aus einer HTML-Datei asp.net c# html html-agility-pack regexIch habe eine HTML-Seite, die einige Dateinamen enthält, die ich von einem Webserver herunterladen möchte. Ich muss diese Dateinamen lesen, um eine Liste zu erstellen, die an meine Webanwendung übergeben wird, die die Datei vom Server herunterlädt. Diese Dateinamen haben eine gewisse Erweiterung.
Ich habe über dieses Thema gegraben, habe aber nichts außer
Gibt es keinen anderen Weg, so dass ich nach Text suchen kann, der ein Muster wie filename.ext aus einer HTML-Datei hat?
Beispiel-HTML, das den Dateinamen enthält -
<p class=3DMsoNormal style=3D'margin-top:0in;margin-right:0in;margin-bottom=:0in; margin-left:1.5in;margin-bottom:.0001pt;text-indent:-.25in;line-height:normal;mso-list:l1 level3 lfo8;tab-stops:list 1.5in'><![if !supportLists]> <span style=3D'font-family:"Times New Roman","serif";mso-fareast-font-family:"Times New Roman"'><span style=3D'mso-list:Ignore'>1.<span style=3D'font:7.0pt "Times New Roman"'>
</span></span></span><![endif]><span style=3D'font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"'>**13572_PostAccountingReport_2009-06-03.acc**<o:p></o:p></span></p>
Ich kann HTML Agility Pack nicht verwenden, da ich keine Anwendung oder kein Tool herunterladen und verwenden darf.
Kann das nicht durch irgendeine andere Logik erreicht werden?
Das habe ich bisher gemacht
string pageSource = "";
string geturl = @"C:\Documents and Settings\NASD_Download.mht";
WebRequest getRequest = WebRequest.Create(geturl);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
pageSource.Replace("=", "");
}
var fileNames = from Match m in Regex.Matches(pageSource, @"[0-9]+_+[A-Za-z]+_+[0-9]+-+[0-9]+-+[0-9]+.+[a-z]")
select m.Value;
foreach (var s in fileNames)
Response.Write(s);
Da in jedem Dateinamen ein "=" vorkommt, kann ich den Dateinamen nicht finden. Wie kann ich das Auftreten von "=" in pageSource string
Danke im Voraus
Akhil
Nun, regex
weiß, dass regex
nicht ideal ist, um Werte in HTML zu finden:
var files = [];
var p = document.getElementsByTagName('p');
for (var i = 0; i < p.length; i++){
var match = p[i].innerHTML.match(/\s(\S+\.ext)\s/)
if (match)
files.push(match[1]);
}
Hinweis: Lesen Sie die Kommentare zu der Frage.
Wenn die Erweiterung beliebig sein kann, können Sie Folgendes verwenden:
var files = [];
var p = document.getElementsByTagName('p');
for (var i = 0; i < p.length; i++){
var match = p[i].innerHTML.match(/\b(\S+\.\S+)\b/)
console.log(match)
if (match)
files.push(match[1]);
}
document.getElementById('result').innerHTML = files + "";
Aber das ist wirklich nicht zuverlässig.
Es kann unmöglich sein, Dateinamen mit gemeinsamen Muster wegen 1.5in
-.25in
7.0pt
und dergleichen zu bekommen, versuchen, genauer zu sein (wenn möglich), like
/[a-z0-9_-]+\.[az]+/gi
oder
/>[a-z0-9_-]+\.[az]+</gi
(Markup eingeschlossen) oder even
/>\d+_PostAccountingReport_\d+-\d+-\d+\.[az]+</gi