C#扩展 HTMLParser 对<strong>或自定义标签的处理

使用前提,你需要知道HTMLParser是用于对Html的文本处理的。

具体可参考:

黄聪:C#解析HTML DOM解析类 HtmlParser.Net 下载
 

当我使用的时候,发现HTMLParser里面只支持46个标签,包括:<html>, <body>, <div>, <span>等等。

但是不支持<strong>, <font>, <em>及其他自定义标签的识别。

网上搜索的,都是对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>都没有了,则意味着成功了。

当然,你们自己可以根据自己的需求,将筛选条件进行改动。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

willgon123

谢谢打赏,我将再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值