HtmlAgilityPack忽略XPath案例

.net-2.0 c# case-sensitive html-agility-pack xpath

我用的時候

SelectSingleNode("//meta[@name='keywords']")

它不起作用,但當我使用原始文檔中使用的相同案例時,它工作得很好:

SelectSingleNode("//meta[@name='keywords']")

所以問題是如何設置忽略大小寫?

一般承認的答案

如果您需要更全面的解決方案,可以為XPath處理器編寫擴展函數,該函數將執行不區分大小寫的比較。這是相當多的代碼,但你只寫了一次。

實現擴展後,您可以按如下方式編寫查詢

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

其中Extensions:CaseInsensitiveComparison是下面示例中實現的擴展函數。

注意:這個測試沒有經過充分測試我只是將它放在一起進行此響應,因此錯誤處理等不存在!

以下是提供一個或多個擴展功能的自定義XSLT上下文的代碼

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

然後,您可以在XPath查詢中使用上述擴展函數,這是我們案例的示例

"//meta[@name[Extensions:CaseInsensitiveComparison('Keywords')]]"

熱門答案

如果實際值是一個未知的情況,我認為你必須使用翻譯。我相信它是:

SelectSingleNode("//meta[translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='keywords']")

這是hack,但它是XPath 1.0中的唯一選項(除了與大寫相反)。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因