Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中,如何使用html agility pack获得唯一列表所有标记_C#_Html_Asp.net Mvc_Parsing_Tags - Fatal编程技术网

在c#中,如何使用html agility pack获得唯一列表所有标记

在c#中,如何使用html agility pack获得唯一列表所有标记,c#,html,asp.net-mvc,parsing,tags,C#,Html,Asp.net Mvc,Parsing,Tags,如何从html字符串中获取所有标记的唯一列表。但是我只能一个接一个地提取标签 代码 public static void HtmlParser() { string html = @"<TD > <DIV align=right>Name :<B> </B></DIV></TD> <TD width=""50%""> <INPUT class=box value=Jo

如何从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;
}
publicstaticvoid HtmlParser()
{
字符串html=@”
姓名:
这是一个vba代码块
你好,我是sujoy”; HtmlDocument htmlDoc=新HtmlDocument(); htmlDoc.LoadHtml(html); 字符串代码=htmlDoc.DocumentNode。 .SelectSingleNode(“//代码”).InnerHtml; 字符串TD=htmlDoc.DocumentNode .SelectSingleNode(“//TD”).InnerText; }

对于上面的代码,我希望输出是一个
列表
{“DIV”、“TD”、“TR”、“code”}

不确定“html字符串中所有标记的唯一列表”的确切含义

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

htmlDoc.DocumentNode.Descendants();
如果需要所有
标记的列表,可以使用LINQ:

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

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);
    }
}
可以通过这种方式检索所有唯一标记的列表,例如:

htmlDoc.DocumentNode.Descendants().Where(d => !d.Name.StartsWith("#")).Select(d => d.Name).GroupBy(d => d).Select(g => g.Key)
这将使用LINQ完成以下步骤:

  • 删除以“#”开头的子体(注释、文本等),只保留标记
  • 仅选择标记名(以便根据请求将其作为字符串获取)
  • 按标记名分组(因此每个标记只能得到一个)
  • 选择键(唯一的标记名)

  • 使用
    htmlDoc.DocumentNode.substanders()
    ,对于唯一列表,使用
    哈希集

    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);
        }
    }
    
    publicstaticvoid HtmlParser()
    {
    HtmlDocument htmlDoc=新HtmlDocument();
    LoadHtml(“您的html字符串包含像…”这样的标记);
    HashSet hs=新的HashSet();
    foreach(htmlDoc.DocumentNode.subjects()中的var dec)
    {
    hs.添加(12月名称);
    }
    }
    
    关于这个问题,您有什么不确定的地方。您的两个代码都返回一个包含25个元素的内部列表??我想要一个简单的字符串列表。你要求一个唯一的标签列表。我现在明白了,在您添加了示例之后,您需要一个唯一标记的列表。我编辑了我的答案以满足你的需要。