在c#中,如何使用html agility pack获得唯一列表所有标记
如何从html字符串中获取所有标记的唯一列表。但是我只能一个接一个地提取标签 代码在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
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个元素的内部列表??我想要一个简单的字符串列表。你要求一个唯一的标签列表。我现在明白了,在您添加了示例之后,您需要一个唯一标记的列表。我编辑了我的答案以满足你的需要。