2014-09-22 2 views
3

Ive смотрел на SO и нашел много Q & A, который может быть тем же самым типом проблемы, но я не могу заставить мой работать, im делает что-то неправильно.SelectSingleNode как нижний регистр

Когда я извлечь определенные <meta теги Я делаю это таким образом

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

Эта работа просто отлично, за исключением того, оно не соответствует

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

Ive пытался использовать нижний регистр() function like this,

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

но не работает.

Я пользуюсь новейшими HtmlAgilityPack.

Как я могу это решить? Может быть, лучший способ?

ответ

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"); 
+1

Thanks @decPL. Красивое решение LINQ, я буду использовать его! Еще раз спасибо! –

Смежные вопросы