コード例 #1
0
        /// <summary>
        /// Recupera i valori trovati per l'xpath specificato utilizzando XPathNavigator
        /// </summary>
        /// <typeparam name="TType">Tipo di ritorno, effettua il cast utilizzando GetValue-TTYpe</typeparam>
        /// <param name="nav">XPathNavigator da valutare</param>
        /// <param name="xPath">query xpath</param>
        /// <param name="stopAtFirstResult">si ferma al primo riscontro (interrompe il ciclo)</param>
        /// <returns>il valore recuperato</returns>
        public static IEnumerable <TType> GetValuesFromXPath <TType>(this XPathNavigator nav, string xPath, bool stopAtFirstResult = false)
        {
            var expr = nav.GenerateExpression(xPath);

            if (expr.ReturnType == XPathResultType.Boolean)
            {
                var eval = nav.Evaluate(expr);
                return(new[] { eval.GetValue <TType>() });
            }

            var navigators = nav.SelectFromXPath(expr, stopAtFirstResult);

            return(navigators
                   .Select(currentNavigator =>
                           (String.IsNullOrEmpty(currentNavigator.InnerXml) ? currentNavigator.OuterXml : currentNavigator.InnerXml)
                           .GetValue <TType>())
                   .ToList());
        }
コード例 #2
0
        /// <summary>
        /// Aggiorna il un campo xml con il valore specificato per l'elemento radice
        /// </summary>
        /// <param name="navigator">Elemento da modificare</param>
        /// <param name="xPath">XPath da valutare per il SetValue</param>
        /// <param name="value">Valore da aggiornare</param>
        public static void Update(this XPathNavigator navigator, string xPath, string value)
        {
            if (navigator == null)
            {
                throw new ArgumentNullException(nameof(navigator));
            }
            if (string.IsNullOrEmpty(xPath))
            {
                throw new ArgumentNullException(nameof(xPath));
            }

            var elementToUpdate = navigator
                                  .SelectFromXPath(navigator.GenerateExpression(xPath), stopAtFirstResult: true, forUpdate: true)
                                  .FirstOrDefault();

            if (elementToUpdate == null)
            {
                throw new ArgumentException("Non esiste nessun nodo per l'xpath specificato", "xPath");
            }

            elementToUpdate.SetValue(value);
        }