SelectSingleNode为小写

时间:2014-09-22 14:24:47

标签: c# xpath html-agility-pack

我一直在寻找SO并发现许多Q& A可能是同一类型的问题,但我不能让我工作,我做错了。

当我提取某个<meta标签时,我就是这样做的

HtmlNode clnode = 
htmlDoc.DocumentNode.SelectSingleNode("//meta[@http-equiv='content-type']");

这项工作很好,除了它不匹配

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

我试过使用像这样的小写()函数,

HtmlNode ctnode = 
htmlDoc.DocumentNode.SelectSingleNode("//meta[lower-case(@http-equiv)='content-type']");

但它不起作用。

我使用的是最新的HtmlAgilityPack

我该如何解决这个问题? 有没有更好的方法?

1 个答案:

答案 0 :(得分:4)

如果你想使用xpath选择,据我所知HtmlAgilityPack使用XPath 1.0,所以你需要诉诸一些丑陋的黑客,例如:

HtmlNode clnode = htmlDoc.DocumentNode.SelectSingleNode("//meta[translate(@http-equiv,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='content-type']");

或者你可以简单地使用LINQ:

var clnode= htmlDoc.DocumentNode
                   .Elements("meta")
                   .SingleOrDefault(el => el.Attributes["http-equiv"].Value.ToLower() == "content-type");