【问题标题】:In c# how to get unique list all tags using html agility pack在c#中如何使用html敏捷包获取所有标签的唯一列表
【发布时间】:2019-01-19 19:05:24
【问题描述】:

如何从 html 字符串中获取所有标签的唯一列表。但我只能一一提取标签。

代码

public static void HtmlParser()
{
    string html = @"<TD >
    <DIV align=right>Name :<B> </B></DIV></TD>
    <TD width=""50%"">
        <INPUT class=box value=John maxLength=16 size=16 name=user_name>
    </TD>
    <TR vAlign=center> <code> This is a <kwd>vba</kwd> code piece</code>  Hi I am sujoy";

    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);
    string code = htmlDoc.DocumentNode.
    .SelectSingleNode("//code").InnerHtml;
    string TD = htmlDoc.DocumentNode
    .SelectSingleNode("//TD").InnerText;
}

对于上面的代码,我希望输出是list{"DIV","TD","TR","CODE"}

【问题讨论】:

    标签: c# html asp.net-mvc parsing tags


    【解决方案1】:

    使用 htmlDoc.DocumentNode.Descendants() 并且对于唯一列表使用 HashSet:

    public static void HtmlParser()
    {
        HtmlDocument htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml("Your html string containing tags like <div></div>...");
        HashSet<string> hs = new HashSet<string>();
        foreach(var dec in htmlDoc.DocumentNode.Descendants())
        {
            hs.Add (dec.Name);
        }
    }
    

    【讨论】:

      【解决方案2】:

      不确定您所说的“来自 html 字符串的所有标签的唯一列表”是什么意思。

      如果您想要 HTML 文档中的每个元素,请使用:

      htmlDoc.DocumentNode.Descendants();
      

      如果您想要所有 &lt;code&gt; 标记的列表,实现此目的的一种方法是使用 LINQ:

      htmlDoc.DocumentNode.Descendants().Where(d => d.Name == "code");
      

      编辑:

      可以通过这种方式检索所有唯一标签的列表,例如:

      htmlDoc.DocumentNode.Descendants().Where(d => !d.Name.StartsWith("#")).Select(d => d.Name).GroupBy(d => d).Select(g => g.Key)
      

      这使用 LINQ 执行以下步骤:

      1. 删除以“#”开头的后代(cmets、文本等),只留下标签。
      2. 仅选择标签名称(这样您就可以根据要求将其作为字符串获取)
      3. 按标签名称分组(因此您只会得到一个)
      4. 选择键(唯一的标签名称)

      【讨论】:

      • 你对这个问题有什么不确定。无论如何,您的两个代码都返回了 25 个元素的内部列表?我想要一个简单的字符串列表。
      • 您要求提供唯一的标签列表。我现在明白,在您添加示例之后,您想要一个唯一标签列表。我编辑了我的答案以满足您的需求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2023-03-25
      • 2013-02-28
      • 2014-05-14
      相关资源
      最近更新 更多