Лучший способ отфильтровать HTML-файл по определенным словам - PullRequest
0 голосов
/ 14 марта 2019

Я хочу прочитать и отфильтровать HTML-файл. Я планирую читать файл построчно и сохранять только те строки, которые «инкапсулированы» тэгами td (я не могу скопировать их здесь, потому что они по какой-то причине не будут отображаться). Например:


    <html>
      <head>
        <META http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>
              Tabelle Artikel</title>
      </head>
      <body>
        <table width="900" cellspacing="0" cellpadding="0">
          <tr>
            <td style="vertical-align:top;font-family:Arial;font-size:14pt;">
                  Tabelle <strong>Artikel</strong><span style="font-size:10pt;padding-left:10"><a href="_Index.html">Tabellen-Übersicht</a></span></td>
          </tr>
          <tr>
            <td style="vertical-align:top;font-family:Arial;font-size:.8em;padding-bottom:5;padding-left:30;">&nbsp;</td>
          </tr>
          <tr>
            <td>
              <table border="0" cellpadding="1" cellspacing="0" style="border:1px solid darkgray;width:100%">
                <thead>
                  <tr>
                    <td style="font-family:Arial; font-size:.9em;font-weight:bold;">Name</td>
                    <td style="font-family:Arial; font-size:.9em;font-weight:bold;">Label</td>
                    <td style="font-family:Arial; font-size:.9em;font-weight:bold;">Typ</td>
                    <td style="font-family:Arial; font-size:.9em;font-weight:bold;">MDT</td>
                    <td style="font-family:Arial; font-size:.9em;font-weight:bold;">Format</td>
                  </tr>
                </thead>
                <tbody>
                  <tr style="background-color:black;color:white;">

В этом примере в строку будут сохранены только те строки, которые были инкапсулированы тегами TD.

Это довольно просто и легко, если не учитывать тот факт, что инкапсулированный текст может быть достаточно большим, чтобы иметь длину в несколько строк. Это затрудняет мне фильтрацию (я новичок).

        static void Main(string[] args)
    {
        string line = "";
        string FilteredHTML = "";
        bool SaveLine = false;

        using (StreamReader Reader = new StreamReader(@"FilePath"))
        {
            while ((line = Reader.ReadLine()) != null)
            {
                if (line.Contains("<td") || SaveLine == true)
                {
                    {
                        FilteredHTML += line;
                        SaveLine = true;
                    }

                }
                if (line.Contains("</td>") && (!line.Contains("<td")))
                {
                    {
                        FilteredHTML += line;
                        SaveLine = false;
                    }              
                }
            }
        }
        while (FilteredHTML.Contains("  ")) FilteredHTML = FilteredHTML.Replace("  ", " ");
        string Output = "";
        string Delimiter = "</td>";
        var tokens = Regex.Split(FilteredHTML, Delimiter);
        foreach (var item in tokens)
        {
            Output = item;
            Output += Delimiter;
            Console.WriteLine(Output);
        }
        Console.ReadLine();
    }

Это работает в определенной степени, но у меня все еще есть текст перед тегами. И тот факт, что я добавляю разделитель вручную после его использования, также вызывает появление нескольких строк подряд.

Как вы можете видеть, это беспорядок, и я старался изо всех сил, чтобы он работал, но я не могу помочь, но думаю, что должен быть более простой способ фильтровать HTML-файл для определенных строк. Я также пытался использовать пакет HTML-Agility, но не нашел ничего, что помогло бы мне отфильтровать определенные строки.

...