none
Mit RegEx HTML-Datei analysieren RRS feed

  • Frage

  • Hallo

    Ich habe eine HTML-Datei aus welcher div. Infos extrahiert werden müssen.

    Grundstruktur ist eine Tabelle. Wenn ich mit     <TR\s*[^>]*?>(?<ROW>.*?)<\/TR> Die einzelnen Zeilen bekommen möchte, geht das nur, solange in den TD-Tags nicht auch wieder eine Tabelle steht.

    Wie muss ich das umstellen, damit ein ROW eine Untertabelle zu stehen kommt? Ich weis, dass es dann nicht noch mehrere Untertabellen haben kann.

     

    Gruss Christoph

     

    Montag, 29. März 2010 22:17

Antworten

Alle Antworten

  • Hallo Christoph,

    Kannst Du die HTML Datei und den Code denn Du hast hier posten?

    Schau Dir mal den folgenden Diskussionsfaden an. Vielleicht kann er Dir weiter helfen.

    http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5c88f68c-c396-4d7c-bf31-47ceebe2dbbe/ - Hier findest Du zum Beispiel folgender Code:

               string input = @"<html>...<table>
                   <tr><td>a</td><td>b</td></tr>
                   <tr><td>c</td><td>d</td></tr>
                </table>
                </html>";
    
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(input);
                HtmlNode table = doc.DocumentNode.SelectSingleNode("//table");
    
                string mystring = table.InnerText; //"\r\n               ab\r\n               cd\r\n            "
    
                HtmlNode row2 = table.SelectSingleNode("tr[2]");
                HtmlNode row2col1 = row2.SelectSingleNode("td[1]");
                row2col1.InnerHtml = "hello";
    
                Console.WriteLine(doc.DocumentNode.OuterHtml);

    Danke und Grüße,

    Robert

    Dienstag, 30. März 2010 07:00
    Moderator
  • Hallo Christoph,

    schau mal, ob Dir das Html Agility Pack weiterhilft.

    Gruß Elmar
    Dienstag, 30. März 2010 07:05
    Beantworter
  • Hallo

     

    Die Tabelle würde etwa so aussehen:

    <table>
    <tr>
    	<td>a</td>
    	<td>
    		<table>
    		<tr>
    			<td>b</td>
    			<td>c</td>
    		</tr>
    		</table>
    	</td>
    </tr>
    <tr>
    	<td>d</td>
    	<td>e</td>
    </tr>
    </table>

    Ich habe es bis mir RegEx gemacht und bei diesem Probleme komme ich nicht weiter.

    In der 2. Spalte muss nicht immer eine Tabelle stehen, es kann auch nur ein Wert stehen.

    Ich werde das mit dem htmlDocument mal prüfen. Ich habe da eben noch keine vollständige HTML-Seite sondern nur Ausschnitte und muss über die Kommentare die zu bearbeitenden Tabellen bestimmen.

    Habe gerade gesehen, dass mit RegEx evt. Back Reference helfen könnte.

    Gruss Christoph

    Dienstag, 30. März 2010 08:43
  • Werde ich prüfen, danke.

     

    Gruss Christoph

    Dienstag, 30. März 2010 08:44
  • Hallo Elmar

    HAP sieht sehr interessant aus. Da ich bis jetzt mit XPath nur ganz wenig gemacht habe, muss ich mich da noch einarbeiten.

    Falls du HAP selber schon eingesetzt hast,kannst du mir aber vieleicht bei einem Problem helfen.

    Ich nutze eine HTML-Seite um einen Bereich der Seite anders aufzubereiten(fürs iPhone) und möchte dann am Schluss diesen Bereich durch den neuen Bereich ersetzen.

    Der neue Bereich ist eine Table nach einem Form-Element.

    So möchte ich das ersetzen, was aber zu einem Fehler führt;

    oMainHtmlRootNode.ReplaceChild(oNewMailHtmlNode, oMainHtmlRootNode.SelectSingleNode("//form//following-sibling::table"))

    Node "...." was not found in the collection ....

    oNewMailHtmlNode habe ich manuell zusammengesetzt

    Eine Idee?

     

    Gruss Christoph

    Mittwoch, 31. März 2010 18:53