0

我正在尝试使用 SelectSingleNode 以小写形式获取 xpath 表达式的值,是否有 Xpath 可以为我提供已评估 xpath 表达式的小写值?

有一个 xsl 转换表是可能的,但是下面有可能吗?

该函数期望具有节点集类型,下面计算为字符串,因此它抛出异常。是否可以将返回的字符串转换为节点集以使 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 
4

1 回答 1

1

如果您有一个返回原始值(字符串、数字、布尔值)而不是一组节点的 XPath 表达式,您需要使用Evaluateon 方法XPathNavigator,请参阅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;

另一方面,.NET 在字符串操作上比 XPath 1.0 更强,所以我很想使用

 XPathNavigator test = nav.SelectSingleNode(path);
 string v = test.Value.ToLower();
于 2013-05-02T11:32:56.427 回答