如何从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"}
使用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);
}
}
不确定你的意思是“来自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执行以下步骤: