在c#中如何使用html agility pack获取所有标签的唯一列表

问题描述 投票:0回答:2

如何从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
2个回答
0
投票

使用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);
    }
}

0
投票

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

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

htmlDoc.DocumentNode.Descendants();

如果你想要一个所有<code>标签的列表,实现这一点的一种方法是使用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. 删除以“#”开头的后代(注释,文本等),只留下标签。
  2. 仅选择标记名称(因此您将根据请求将其作为字符串获取)
  3. 按标签名称分组(因此您只能获得其中一个)
  4. 选择键(唯一标签名称)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.