使用前提,你需要知道HTMLParser是用于对Html的文本处理的。
具体可参考:
黄聪:C#解析HTML DOM解析类 HtmlParser.Net 下载
当我使用的时候,发现HTMLParser里面只支持46个标签,包括:<html>, <body>, <div>, <span>等等。
但是不支持<strong>, <font>, <em>及其他自定义标签的识别。
网上搜索的setNodeFactory的使用,都是对java程序的支持。于是开始研究怎么C#对HTMLParser怎么使用标签注册。
首先定义想要HTMLParser支持的标签:
定义对Strong标签支持的类:
public class StrongTag : CompositeTag
{
private static string[] mIds = { "strong" };
private static string[] mEndTagEnders = { "strong" };
public StrongTag()
{
}
public string[] getIds()
{
return mIds;
}
public string[] getEndTagEnders()
{
return mEndTagEnders;
}
}
定义对font标签支持的类:
public class FontTag : CompositeTag
{
private static string[] mIds = { "font" };
private static string[] mEndTagEnders = { "font" };
public FontTag()
{
}
public string[] getIds()
{
return mIds;
}
public string[] getEndTagEnders()
{
return mEndTagEnders;
}
}
定义好了之后,使用PrototypicalNodeFactory进行注册:
var str = "<html>...</html>";
var parser = new Parser(new Lexer(str));
PrototypicalNodeFactory factory = new PrototypicalNodeFactory();
factory.Put("STRONG", new StrongTag());
factory.Put("FONT", new FontTag());
parser.NodeFactory = factory;
最后写上parser.NodeFactory = factory; 就注册成功。
使用的时候:
List<NodeFilter> filterList = new List<NodeFilter>();
filterList.Add(new TagNameFilter("strong"));
var filterBase = new OrFilter();
foreach (var filter in filterList)
{
filterBase = new OrFilter(filterBase, filter);
}
var nodelist = parser.Parse(filterBase);
for (var i = 0; i < nodelist.Count; i++)
{
var node = nodelist[i];
ITag tag = node == null ? null : (node is ITag ? node as ITag : null);
if (tag != null)
{
string removeHtml = tag.ToHtml();
str = str.Replace(removeHtml, "");
}
}
如果新的str文本中,所有<strong>都没有了,则意味着成功了。
当然,你们自己可以根据自己的需求,将筛选条件进行改动。