首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于评估LowerCase NodeSet值的SelectSingleNode

用于评估LowerCase NodeSet值的SelectSingleNode
EN

Stack Overflow用户
提问于 2013-05-02 19:20:47
回答 1查看 384关注 0票数 0

我正在尝试使用SelectSingleNode获取小写形式的xpath表达式的值,有没有Xpath可以给出计算后的xpath表达式的小写形式的值?

使用xsl转换表是可能的,但是使用下面的转换表可以吗?

该函数期望有nodeset类型,下面的计算结果为string,因此抛出异常。是否可以将返回的字符串转换为节点集以使SelectSingleNode满意

代码语言:javascript
复制
        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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 19:32:56

如果您的XPath表达式返回一个原始值(字符串、数字、布尔值),而不是一组节点,则需要在XPathNavigator上使用Evaluate方法,请参见http://msdn.microsoft.com/en-us/library/2c16b7x8.aspx

因此,对于您的代码,您可以将其简化为

代码语言:javascript
复制
    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在字符串操作方面更强大,所以我想使用

代码语言:javascript
复制
 XPathNavigator test = nav.SelectSingleNode(path);
 string v = test.Value.ToLower();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16336760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档