C# 查找 标记之间的所有内容,并将其排序为字符串

本文关键字:TR 字符串 排序 查找 之间 | 更新日期: 2023-09-27 18:32:55

我正在制作一个程序,它将网站上的大表格分类为更易于管理和可定制的显示。

类表示内容是什么 tt=文本 nn=数字。下面是其中一个标签的外观示例。除了标签之间的值外,它们都完全相同。

<TR class=r2>
    <TD class=tt headers=0>SOME_Text_here_ending_in_Vi.SG2</TD>
    <TD class=nn headers=1>0</TD>
    <TD class=nn headers=2>0</TD>
    <TD class=nn headers=3>0</TD>
    <TD class=nn headers=4>0</TD>
    <TD class=nn style="COLOR: ; BACKGROUND-COLOR: #00cc00" 
    headers=5>00:00:00</TD>
    <TD class=nn style="COLOR: ; BACKGROUND-COLOR: #00cc00" 
    headers=6>00:00:00</TD>
    <TD class=nn headers=7>7</TD>
    <TD class=nn headers=8>13</TD>
</TR>

页面上有~300个。通过使用 RegEx (?-imsx:" + system + "_*(.?)*_Vi),我设法获得了每个<TR>的第一个<TD> - 系统是我对它们进行排序的。但是,我仍然需要来自<TR>标签的其余信息,因为它与搜索有关。

我的目标是在 ListBox 中创建一个较小的表,该表根据我在"系统"变量中提交的内容显示排序结果。

扫描页面的整个源 HTML 并将其分开的最佳方法是什么 标签 按我的意愿对它们进行排序。从我到目前为止在这里发现的情况来看,正则表达式似乎不能像我想要的那样用于解析 HTML,那么我还有什么其他方法可以实现呢?

C# 查找 <TR></TR> 标记之间的所有内容,并将其排序为字符串

HtmlAgilityPack 是一个完美的工具。将 HTML 放在字符串中,您可以像这样加载它:

        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(htmlCode);

然后你有像XPath这样强大的东西来帮助你完成任务。

因此,假设您想将所有 TR 都放入您的文档中,然后您想对他们的 TD 子项执行一些操作:

        HtmlNode docNode = doc.DocumentNode;
        HtmlNodeCollection trNodes = docNode.SelectNodes("//tr"); 
        foreach (HtmlNode trNode in trNodes)
        {
            HtmlNodeCollection tdNodes = trNode.SelectNodes("td"); 
            // Here you have TD elements in a collection and you can process it
        }

你也可以使用 Linq to Xml。没有测试过,但它应该是这样的:

XDocument xdoc = XDocument.Parse(htmlCode);
var tds = xdoc.Root.Descendants().Where(el => el.Name == "TD");
// tds is a collection of all TD elements of the htmlCode