我试图使用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
答案 0 :(得分:1)
如果您的XPath表达式返回原始值(字符串,数字,布尔值)而不是一组节点,则需要使用Evaluate
上的XPathNavigator
方法,请参阅{{3} }。
因此,对于您的代码,您可以将其简化为
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;
另一方面,.NET在字符串操作方面比XPath 1.0强,所以我很想使用
XPathNavigator test = nav.SelectSingleNode(path);
string v = test.Value.ToLower();