/// <summary> /// Gets XmlPath information of the specified OpenXmlElement. /// </summary> /// <param name="element">The OpenXmlElement.</param> /// <returns>XmlPath to this element from root element.</returns> internal static XmlPath GetXPath(OpenXmlElement element) { if (element == null) { return(null); // throw new ArgumentNullException(nameof(element)); } XmlPath xmlPath = new XmlPath(); xmlPath.PartUri = element.GetPartUri(); Dictionary <string, string> namespaces = new Dictionary <string, string>(); StringBuilder xpath = new StringBuilder(""); BuildXPath(element, xpath, namespaces); xmlPath.XPath = xpath.ToString(); StringBuilder nsString; foreach (var ns in namespaces) { nsString = new StringBuilder(""); nsString.Append("xmlns:"); nsString.Append(ns.Key); nsString.Append("=\""); nsString.Append(ns.Value); nsString.Append("\""); xmlPath.NamespacesDefinitions.Add(nsString.ToString()); } return(xmlPath); }
/// <summary> /// Initializes a new instance of the XmlPath. /// </summary> internal XmlPath(OpenXmlElement element) { if (element == null) { throw new ArgumentNullException(nameof(element)); } PartUri = element.GetPartUri(); XPath = TryBuildXPath(GetElements(element), out var namespaces); #pragma warning disable CS0618 // Type or member is obsolete if (namespaces == null) { Namespaces = ReadOnlyWrapper.Instance; NamespacesDefinitions = Cached.Array <string>(); } else { NamespacesDefinitions = namespaces .GetNamespacesInScope(XmlNamespaceScope.Local) .Select(ns => $"xmlns:{ns.Key}=\"{ns.Value}\"") .ToArray(); Namespaces = new ReadOnlyWrapper(namespaces); } #pragma warning restore CS0618 // Type or member is obsolete }