【问题标题】:Grabbing meta-tags and comments using HTML Agility Pack使用 HTML Agility Pack 抓取元标记和评论
【发布时间】:2011-01-22 05:12:18
【问题描述】:

我一直在寻找有关使用 HTML Agility Pack 的教程,因为它似乎可以完成我想要它做的所有事情,但对于如此强大的工具来说,互联网上似乎没有什么噪音。

我正在编写一个简单的方法,它将根据名称检索任何给定的标签:

public string[] GetTagsByName(string TagName, string Source) {
    ...
}

这可以使用正则表达式轻松完成,但我们都知道使用正则表达式解析 HTML 是不对的。到目前为止,我有以下代码:

...
// TODO: Clear Comments (can this be done or should I use RegEx?)
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(Source);
ArrayList tags = new ArrayList();
string xpath = "//" + TagName;
foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes(xpath) {
    tags.Add(node.Text);
}
return (string[])tags.ToArray(typeof(String));

我希望能够首先从 HTML 中删除所有 cmets,然后根据其名称返回正确的标签。如果可能的话,我还想根据属性返回某些元标记,例如机器人。我对 xpath 不是很好,所以任何帮助都会很好。

任何帮助将不胜感激。

【问题讨论】:

  • 不要忘记 HTML 并不要求用户拥有 <head><body> 元素这一事实。而 HTML cmets 通常使用<!-- comment --> 完成。
  • 我知道这些,并且我已经编写了一些基本的正则表达式来处理它,但我更感兴趣的是获得一些有关使用 HTML Agility 包执行此操作的信息。它的文档很糟糕!

标签: c# .net html-parsing html-agility-pack


【解决方案1】:

HtmlAgilityPack 的 HtmlDocument 实现 IXpathNavigable,因此它使用标准的 .NET XPath 引擎。任何 XPath 1.0 文档都适用,尤其是涉及 System.Xml.XPath 的文档。

"//comment()" 查找所有 cmets
"//meta" 查找所有"meta" 元素

HtmlDocument 的设计看起来很像 XmlDocument,因此有关它的示例和教程将有些适用。

一些 MSDN 链接:

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多