Esempio n. 1
0
        public static IEnumerable<XmlNode> DotNetXPath(XmlDocument xml, string xpathContextSelector, string xPathExpression, IDictionary<string, string> namespaces, XPathExpressionType changeContextExpression) {
            Contract.Requires<ArgumentNullException>(xml != null);
            Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(xpathContextSelector));
            Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(xPathExpression));

            XmlNode context = xml.SelectSingleNode(xpathContextSelector);

            if (changeContextExpression != null) {
                context = context.SelectSingleNode(changeContextExpression.ToString());
            }

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(context.OuterXml);

            XPathNavigator navigator = context.CreateNavigator();

            navigator = doc.DocumentElement.CreateNavigator();
            List<XmlNode> result = new List<XmlNode>();

            XPathNodeIterator iterator;
            try {
                if (namespaces == null) {
                    iterator = navigator.Select(xPathExpression);
                }
                else {
                    XmlNamespaceManager manager = new XmlNamespaceManager(xml.NameTable);
                    foreach (var elem in namespaces) {
                        manager.AddNamespace(elem.Key, elem.Value);
                    }

                    iterator = navigator.Select(xPathExpression, manager);
                }

            }
            catch (XPathException ex) {
                throw Diagnostic.DiagnosticTools.ExceptionUtil.ThrowHelperError(new XacmlInvalidDataTypeException("Invalid XPath query", ex));
            }

            if (iterator.Count > 0) {
                while (iterator.MoveNext()) {
                    result.Add(iterator.Current.UnderlyingObject as XmlNode);
                }
            }

            return result;
        }
Esempio n. 2
0
 internal static void MntpAddStartNodeXPathExpressionType(this HttpCookie c, int id, XPathExpressionType xPathExpressionType)
 {
     c[string.Concat(CookieVals.Snxet, "_", id)] = ((int)xPathExpressionType).ToString();
 }
 internal static void MntpAddStartNodeXPathExpressionType(this HttpCookie c, int id, XPathExpressionType xPathExpressionType)
 {
     c[string.Concat(CookieVals.Snxet, "_", id)] = ((int)xPathExpressionType).ToString();
 }
Esempio n. 4
0
        public static IEnumerable <XmlNode> DotNetXPath(XmlDocument xml, string xpathContextSelector, string xPathExpression, IDictionary <string, string> namespaces, XPathExpressionType changeContextExpression)
        {
            if (xml == null)
            {
                throw new ArgumentNullException(nameof(xml));
            }

            if (xpathContextSelector == null)
            {
                throw new ArgumentNullException(nameof(xpathContextSelector));
            }

            if (xPathExpression == null)
            {
                throw new ArgumentNullException(nameof(xPathExpression));
            }

            if (xpathContextSelector.Length == 0)
            {
                throw new ArgumentException("Value cannot be empty.", nameof(xpathContextSelector));
            }

            if (xPathExpression.Length == 0)
            {
                throw new ArgumentException("Value cannot be empty.", nameof(xPathExpression));
            }

            XmlNode context = xml.SelectSingleNode(xpathContextSelector);

            if (changeContextExpression != null)
            {
                context = context.SelectSingleNode(changeContextExpression.ToString());
            }

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(context.OuterXml);

            XPathNavigator navigator = context.CreateNavigator();

            navigator = doc.DocumentElement.CreateNavigator();
            List <XmlNode> result = new List <XmlNode>();

            XPathNodeIterator iterator;

            try {
                if (namespaces == null)
                {
                    iterator = navigator.Select(xPathExpression);
                }
                else
                {
                    XmlNamespaceManager manager = new XmlNamespaceManager(xml.NameTable);
                    foreach (var elem in namespaces)
                    {
                        manager.AddNamespace(elem.Key, elem.Value);
                    }

                    iterator = navigator.Select(xPathExpression, manager);
                }
            }
            catch (XPathException ex) {
                throw new XacmlInvalidDataTypeException("Invalid XPath query", ex);
            }

            if (iterator.Count > 0)
            {
                while (iterator.MoveNext())
                {
                    result.Add(iterator.Current.UnderlyingObject as XmlNode);
                }
            }

            return(result);
        }