【问题标题】:Parsing Tabular cell data with space where there is td tag解析带有空格的表格单元格数据,其中有 td 标签
【发布时间】:2010-04-03 10:37:45
【问题描述】:

我在 html 敏捷包 的帮助下解析 html 表格信息。现在首先我在该表中找到行,例如

var rows = table.Descendants("tr");

然后我找到每一行的单元格数据,例如

foreach(var row in rows)
{
     string rowInnerText = row.InnerText;
}

这给了我单元格数据。但是它们之间没有空格,如 NameAdressPhone No 但我想要像 Name Address Phone No 这样的内部文本意味着有 td 标签我想在不同列单元格之间留一个空格

【问题讨论】:

    标签: c# .net winforms html-agility-pack


    【解决方案1】:

    这是一个想法,但完全未经测试:

    var rows = table.Descendants("tr").Select(tr =>
        string.Join(" ", tr.Descendants("td").Select(td => td.InnerText).ToArray()));
    

    这应该为您提供 IEnumerable<string> 其中每个包含的元素代表表格中的一行,采用您的问题中描述的格式。如果您确实需要对行进行循环以进行其他处理,请保留您的 foreach 循环并在其主体中使用 LINQ 魔法:

    var rows = table.Descendants("tr");
    
    foreach (var row in rows)
    {
         string rowInnerText = string.Join(" ",
             row.Descendants("td").Select(td => td.InnerText).ToArray());
    }
    

    【讨论】:

    • @Jorn Schou-Rode,非常感谢您的回答。在第二个代码中是否缺少某些内容,因为我收到错误 tr does not exist in this context。
    • @Harikrishna:我的错,混淆了tdrow。现在应该修好了。
    • @Jorn Schou-Rode,不,我已经检查过了,但列标题之间没有空格,得到的结果与我第一次得到的结果相同。
    • @Jorn Schou-Rode,当我从循环中获取第一行(列标题)时,列标题名称之间没有空格,例如 namephonenoaddress。
    • @Har:听起来很奇怪! row.Descendants("td") 表达式返回了多少项?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2015-07-14
    • 2015-11-14
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多