我正在使用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