コード例 #1
0
        /// <summary>
        /// Gets the node value with the xml path.
        /// </summary>
        /// <example>example: xxx.NodePathValue("A.B.C") or xxx.NodePathValue("A.B.C[D]")</example>
        /// <param name="xmlPath">The XML path.</param>
        /// <returns>The value.</returns>
        public string NodePathValue(string xmlPath)
        {
            if (this.IsNullOrWhiteSpace(xmlPath))
            {
                return(null);
            }

            if (!xmlPath.Contains("."))
            {
                return(this.GetValueWithIndex(xmlPath));
            }
            else
            {
                var propertyChain = xmlPath.Trim().Split('.');

                FluentXml result = this;

                foreach (var propertyName in propertyChain)
                {
                    if (!propertyName.EndsWith("]"))
                    {
                        result = result.Node(propertyName);
                    }
                    else
                    {
                        return(result.GetValueWithIndex(propertyName));
                    }
                }

                return(result.Value());
            }
        }
コード例 #2
0
        /// <summary>
        /// Gets the node value with the xml path.
        /// </summary>
        /// <typeparam name="T">Type of the value.</typeparam>
        /// <param name="xmlPath">The XML path.</param>
        /// <param name="defaultValue">The default value.</param>
        /// <param name="defaultOnError">When convert failed, true to return a default value of targetType; false to return defaultValue.</param>
        /// <returns>The value.</returns>
        public T NodePathValue <T>(string xmlPath, T defaultValue, bool defaultOnError = false)
        {
            if (this.IsNullOrWhiteSpace(xmlPath))
            {
                return(defaultValue);
            }

            if (!xmlPath.Contains("."))
            {
                return(XmlConverter.ToObject <T>(this.GetValueWithIndex(xmlPath), defaultValue, defaultOnError));
            }
            else
            {
                var propertyChain = xmlPath.Trim().Split('.');

                FluentXml result = this;

                foreach (var propertyName in propertyChain)
                {
                    if (!propertyName.EndsWith("]"))
                    {
                        result = result.Node(propertyName);
                    }
                    else
                    {
                        return(XmlConverter.ToObject <T>(result.GetValueWithIndex(propertyName), defaultValue, defaultOnError));
                    }
                }

                return(XmlConverter.ToObject <T>(result.Value(), defaultValue, defaultOnError));
            }
        }
コード例 #3
0
        /// <summary>
        /// Gets the nodes with xml path.
        /// </summary>
        /// <example>example: xxx.NodesPath("A.B.C")</example>
        /// <param name="xmlPath">The XML path.</param>
        /// <returns>List of FluentXml.</returns>
        public List <FluentXml> NodesPath(string xmlPath)
        {
            if (this.IsNullOrWhiteSpace(xmlPath))
            {
                return(this.Nodes());
            }

            if (!xmlPath.Contains("."))
            {
                return(this.GetNodesWithIndex(xmlPath));
            }
            else
            {
                var propertyChain = xmlPath.Trim().Split('.');

                FluentXml result = this;

                for (int i = 0; i < propertyChain.Length - 1; i++)
                {
                    result = result.Node(propertyChain[i]);
                }

                return(result.GetNodesWithIndex(propertyChain[propertyChain.Length - 1]));
            }
        }