Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use XPath 2.0 Methods in .NET 4.0?

I am using .NET 4.0 and I would like to use XPath 2.0 methods such as ([Matches()][1], [upper-case()][2], [lower-case()][3]) when trying to find elements in a document.

Example XPath: "/MyDocument/MyNode[matches(@MyAttribute, 'MyValue', 'i')]"

I have tried using:

  • System.Xml.XPath.XPathNavigator.Compile()
  • System.Xml.XmlDocument.SelectNodes()
  • System.Xml.Linq.XDocument.SelectElements()

But I basically throw the exception "UndefinedXsltContextException" (or something similar). Can this be done in .NET 4.0 and if so can you provide a small example on how to set it up to work?

Thanks

like image 297
AAADad Avatar asked Sep 22 '11 19:09

AAADad


1 Answers

.NET doesn't currently support XPath 2.0. See this question for more details and third-party alternatives: XPath and XSLT 2.0 for .NET?

If you don't want to use third-party libraries you could do the minimum required query to get your target element(s) with either XPath 1.0 or LINQ to XML, then do additional work on the data using .NET methods to perform the checks and modifications desired:

  • Matches = Regex.IsMatch - be aware that the XPath regular expression pattern might have different metacharacters than the .NET pattern, so some translation might be needed.
  • upper-case = String.ToUpper - the link mentions culture/invariant options too, in case you need them
  • lower-case = String.ToLower
like image 102
Ahmad Mageed Avatar answered Sep 19 '22 12:09

Ahmad Mageed