GetSegements() публичный Метод

public GetSegements ( ) : IEnumerable
Результат IEnumerable
Пример #1
0
        static string IteratePathSegments(XmlPath xmlPath, ref XElement currentElement)
        {
            var scalarSegment = string.Empty;
            var pathSegments  = new List <XmlPathSegment>(xmlPath.GetSegements().OfType <XmlPathSegment>());
            var segmentIndex  = 0;

            while (currentElement != null && segmentIndex < pathSegments.Count)
            {
                if (segmentIndex == 0 && currentElement.Name != pathSegments[segmentIndex].ActualSegment && currentElement.Name.LocalName != pathSegments[segmentIndex].ActualSegment)
                {
                    currentElement = null;
                    scalarSegment  = null;
                }
                else if (segmentIndex == 0 && pathSegments.Count == 1 && currentElement.Name.LocalName == pathSegments[segmentIndex].ActualSegment)
                {
                    scalarSegment = currentElement.Value;
                }
                else
                {
                    scalarSegment = ScalarSegment(ref currentElement, pathSegments, segmentIndex);
                }

                segmentIndex++;
            }
            return(scalarSegment);
        }
Пример #2
0
        public void GetSegments_Expected_LastSegmentIsCorrect()
        {
            XmlPath path = new XmlPath("Company.Departments().Department:Name", "Company.Departments.Department:Name");

            const string expected = "Name";
            string actual = path.GetSegements().Last().ToString();

            Assert.AreEqual(expected, actual);
        }
Пример #3
0
        public void GetSegments_Expected_CorrectSegmentCount()
        {
            XmlPath path = new XmlPath("Company.Departments().Department:Name", "Company.Departments.Department:Name");

            const int expected = 4;
            int actual = path.GetSegements().Count();

            Assert.AreEqual(expected, actual);
        }
Пример #4
0
        public IEnumerable <object> SelectEnumerable(IPath path)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            XmlPath xmlPath = path as XmlPath;

            if (xmlPath == null)
            {
                throw new Exception(string.Format("Path of type '{0}' expected, path of type '{1}' received.", typeof(XmlPath), path.GetType()));
            }

            XDocument document = Data as XDocument;

            if (document == null)
            {
                throw new Exception(string.Format("Type of {0} was expected for data, type of {1} was found instead.", typeof(XDocument), Data.GetType()));
            }

            List <object> returnData     = null;
            XElement      currentElement = document.Root;

            if (path.ActualPath == XmlPath.NodeSeperatorSymbol)
            {
                if (currentElement != null)
                {
                    returnData = new List <object> {
                        currentElement.ToString()
                    };
                }
            }
            else
            {
                List <IPathSegment> pathSegments = new List <IPathSegment>(xmlPath.GetSegements());
                returnData = new List <object>(SelectEnumberable(pathSegments.Skip(1).ToList(), pathSegments.FirstOrDefault(), currentElement));
            }

            return(returnData);
        }
Пример #5
0
        public object SelectScalar(IPath path)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }

            XmlPath xmlPath = path as XmlPath;

            if (xmlPath == null)
            {
                throw new Exception(string.Format("Path of type '{0}' expected, path of type '{1}' received.", typeof(XmlPath), path.GetType()));
            }

            XDocument document = Data as XDocument;

            if (document == null)
            {
                throw new Exception(string.Format("Type of {0} was expected for data, type of {1} was found instead.", typeof(XDocument), Data.GetType()));
            }

            string   returnData     = string.Empty;
            XElement currentElement = document.Root;

            if (path.ActualPath == XmlPath.NodeSeperatorSymbol)
            {
                if (currentElement != null)
                {
                    returnData = currentElement.ToString();
                }
            }
            else
            {
                List <XmlPathSegment> pathSegments = new List <XmlPathSegment>(xmlPath.GetSegements().OfType <XmlPathSegment>());
                int segmentIndex = 0;

                while (currentElement != null && segmentIndex < pathSegments.Count)
                {
                    if (segmentIndex == 0 && currentElement.Name != pathSegments[segmentIndex].ActualSegment)
                    {
                        currentElement = null;
                        returnData     = null;
                    }
                    else if (segmentIndex == 0 && pathSegments.Count == 1 && currentElement.Name == pathSegments[segmentIndex].ActualSegment)
                    {
                        returnData = currentElement.Value;
                    }
                    else if (segmentIndex > 0)
                    {
                        if (pathSegments[segmentIndex].IsAttribute)
                        {
                            XAttribute attribute = currentElement.Attribute(pathSegments[segmentIndex].ActualSegment);

                            if (attribute != null)
                            {
                                currentElement = null;
                                returnData     = attribute.Value;
                            }
                        }
                        else
                        {
                            currentElement = currentElement.Elements(pathSegments[segmentIndex].ActualSegment).LastOrDefault();
                            // Travis.Frisinger : 09/10/2012 - Fix for null element, naughty Brendan ;)
                            if (currentElement != null)
                            {
                                returnData = currentElement.Value;
                            }
                            else
                            {
                                returnData = string.Empty;
                            }
                        }
                    }

                    segmentIndex++;
                }
            }

            return(returnData);
        }