Text extrahieren von

...

tag oder direkt aus einer HTML-Datei

asp.net c# html html-agility-pack regex

Frage

Ich 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

  1. Regex kann nicht zum Analysieren von HTML verwendet werden.
  2. Verwenden Sie HTML Agility Pack

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"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    </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

Akzeptierte Antwort

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]);
}

Live-Demo

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.

Live-Demo


Beliebte Antwort

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



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow