Я хочу прочитать и отфильтровать 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;"> </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, но не нашел ничего, что помогло бы мне отфильтровать определенные строки.