static public bool DevolveURIWithNamespace(INamespaceMapper mapper, string s, out string uri, out string prefix, out string atom) { atom = null; uri = null; prefix = null; foreach (var pfx in LockInfo.WithLock <IEnumerable <string> >(mapper, mapper.Prefixes.ToArray)) { prefix = pfx; var uril = LockInfo.WithLock(mapper, () => mapper.GetNamespaceUri(pfx)); uri = uril.ToString(); int len = uri.Length; if (len > 0 && s.StartsWith(uri)) { if (String.IsNullOrEmpty(prefix)) { prefix = LockInfo.WithLock(mapper, () => mapper.GetPrefix(uril)); } atom = s.Substring(len); return(true); } string prefixc = prefix + ":"; if (s.StartsWith(prefixc)) { atom = s.Substring(prefixc.Length); return(true); } } atom = null; uri = null; prefix = null; return(false); }
private static string Uri2QName(SNamespaceMap mapLocal, string uri, INamespaceMapper globalNamespaceMaper) { string qname; if (mapLocal.ReduceToQName(uri, out qname)) { return(qname); } string shortName; Uri urlNs; SplitUrl(uri, out shortName, out urlNs); var prefix = globalNamespaceMaper.GetPrefix(urlNs); if (prefix == null) { string p = "ns"; int i = 0; while (mapLocal.HasNamespace(prefix = p + i + ":") || globalNamespaceMaper.HasNamespace(prefix)) { i++; } } mapLocal.AddNamespace(prefix, urlNs); return(prefix + shortName); }