private string BuildNodePath(XPathNavigator navigator, XPathFormat format) { switch (format) { case XPathFormat.Name: return(navigator.Name); case XPathFormat.LocalName: var builder = new StringBuilder("*["); builder.Append($"{XpathFunctionNames.LOCAL_NAME}()='{navigator.LocalName}'"); if (!string.IsNullOrWhiteSpace(navigator.NamespaceURI)) { builder.AppendFormat(" and namespace-uri()='{0}'", navigator.NamespaceURI); } var discriminants = navigator.GetDiscriminants().ToArray(); if (discriminants.Any()) { builder.AppendFormat(" and ({0})", BuildDiscriminantsSelector(navigator, discriminants)); } builder.Append("]"); return(builder.ToString()); default: throw new ArgumentOutOfRangeException(nameof(format), format, null); } }