我正在使用C#和.NET 2.0。如何在XmlDocument.SelectNodes的XPath參數的謂詞中使用translate函數?
鑑於下面的XML,我想獲得一個XMLNodeList
的<user>
節點,其中<role>
是「admin」。
<users>
<user>
<name>John Doe</name>
<roles>
<role>superadmin</role>
<role>admin</role>
</roles>
</user>
<user>
<name>Jane Doe</name>
<roles>
<role>superadmin</role>
<role>admin</role>
</roles>
</user>
<user>
<name>Rob Doe</name>
<roles>
<role>support</role>
</roles>
</user>
</users>
假定roleName =「admin」。這有效,但區分大小寫。
userNodesForRole = _document.SelectNodes("//users/user[roles[role='" + roleName + "']]");
我想以不區分大小寫的方式做到這一點。我知道我不能使用matches
函數,因爲.NET 2.0(也許更高?)不支持XPath 2.0。所以我這樣做:
// abc...xyz is the string literal of the entire alphabet, of course
userNodesForRole = _document.SelectNodes("//users/user[roles[translate(role,'abc..xyz','ABC...XYZ')='" + roleName.ToUpper() + "']]", _xmlNamespaceManager);
但是,我沒有得到任何節點。有人能告訴我我錯了什麼嗎?
順便說一句,C#與您的問題並不真正相關。這是一個.NET 2.0的問題,你恰好在用C#編程。 – 2010-08-19 02:23:57
當你嘗試使用你的代碼調用'translate'時會發生什麼?它在表面上看起來很好。 – Jacob 2010-08-19 02:56:44