我正在尝试使用SelectSingleNode获取小写形式的xpath表达式的值,有没有Xpath可以给出计算后的xpath表达式的小写形式的值?
使用xsl转换表是可能的,但是使用下面的转换表可以吗?
该函数期望有nodeset类型,下面的计算结果为string,因此抛出异常。是否可以将返回的字符串转换为节点集以使SelectSingleNode满意
string xml = "<bac><test>Val</test></bac>";
string xpath = "/bac/test/text()";
var transpath = "translate(/bac/test/text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')";
StringReader sReader = new StringReader(xml);
XmlReader xReader = new XmlTextReader(sReader);
XPathDocument xmlPathDoc = new XPathDocument(xReader);
XPathNavigator nav = xmlPathDoc.CreateNavigator();
XPathNodeIterator nodeIterator = nav.Select("/");
XPathNavigator navNode = nodeIterator.Current;
var v = navNode.SelectSingleNode(transpath).Value;
// expect val 发布于 2013-05-02 19:32:56
如果您的XPath表达式返回一个原始值(字符串、数字、布尔值),而不是一组节点,则需要在XPathNavigator上使用Evaluate方法,请参见http://msdn.microsoft.com/en-us/library/2c16b7x8.aspx。
因此,对于您的代码,您可以将其简化为
string xml = "<bac><test>Val</test></bac>";
string xpath = "/bac/test";
var transpath = "translate(/bac/test,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')";
XPathNavigator nav;
using (StringReader sr = new StringReader(xml))
{
nav = new XPathDocument(sr).CreateNavigator();
}
string v = nav.Evaluate(transpath) as string;另一方面,与XPath 1.0相比,.NET在字符串操作方面更强大,所以我想使用
XPathNavigator test = nav.SelectSingleNode(path);
string v = test.Value.ToLower();https://stackoverflow.com/questions/16336760
复制相似问题