Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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
        }