Exemple #1
0
        public void Evaluate(int SpreadMax)
        {
            if (SpreadMax == 0)
            {
                return;
            }

            if (!Element.IsChanged && !ConfigChanged)
            {
                return;
            }

            Elements.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                var element = Element[i];
                Elements[i] = element != null?GetElementsByName(element, ElementName) : XMLNodes.NoElements;
            }

            var allElements = Elements.SelectMany(spread => spread).ToArray();

            foreach (var attributeInfo in AttributeInfos)
            {
                attributeInfo.AttributeOutputPin.SliceCount       = allElements.Length;
                attributeInfo.AttributeExistsOutputPin.SliceCount = allElements.Length;

                int i = 0;
                foreach (var element in allElements)
                {
                    var attributes = element.Attributes(attributeInfo.AttributeName);
                    var attribute  = attributes.FirstOrDefault();

                    attributeInfo.AttributeOutputPin[i]       = attribute != null ? attribute.Value : "";
                    attributeInfo.AttributeExistsOutputPin[i] = attribute != null;

                    i++;
                }
            }

            ConfigChanged = false;
        }
Exemple #2
0
        // method called each frame in vvvv
        public void Evaluate(int SpreadMax)
        {
            if (SpreadMax == 0)
            {
                return;
            }

            if (!Element.IsChanged && !ConfigChanged)
            {
                return;
            }

            Elements.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                var element = Element[i];
                if (BaseElementName != null)
                {
                    Elements[i] = element != null?GetElementsByXPathQuery(element, BaseElementName) : XMLNodes.NoElements;
                }
            }

            var allElements = Elements.SelectMany(spread => spread).ToArray();

            // process attributes
            foreach (var attributeInfo in AttributeInfos)
            {
                attributeInfo.AttributeOutputPin.SliceCount       = allElements.Length;
                attributeInfo.AttributeExistsOutputPin.SliceCount = allElements.Length;

                int i = 0;
                foreach (var element in allElements)
                {
                    var attributes = element.Attributes(attributeInfo.AttributeName);
                    var attribute  = attributes.FirstOrDefault();

                    attributeInfo.AttributeOutputPin[i]       = attribute != null ? attribute.Value : "";
                    attributeInfo.AttributeExistsOutputPin[i] = attribute != null;
                    i++;
                }
            }

            // process content elements
            foreach (var contentElementInfo in ContentElementInfos)
            {
                contentElementInfo.ContentElementOutputPin.SliceCount       = allElements.Length;
                contentElementInfo.ContentElementExistsOutputPin.SliceCount = allElements.Length;

                int i = 0;
                foreach (var element in allElements)
                {
                    var elements = element.Elements(contentElementInfo.ContentElementName);
                    var el       = elements.FirstOrDefault();

                    contentElementInfo.ContentElementOutputPin[i]       = el != null ? el.Value : "";
                    contentElementInfo.ContentElementExistsOutputPin[i] = el != null;
                    i++;
                }
            }

            // process child elements
            foreach (var childElementInfo in ChildElementInfos)
            {
                childElementInfo.ChildElementOutputPin.SliceCount       = allElements.Length;
                childElementInfo.ChildElementExistsOutputPin.SliceCount = allElements.Length;

                int i = 0;
                foreach (var element in allElements)
                {
                    var elements = element.Elements(childElementInfo.ChildElementName);
                    var el       = elements.FirstOrDefault();
                    childElementInfo.ChildElementOutputPin[i] = el != null?GetElementByXPathQuery(element, childElementInfo.ChildElementName) : XMLNodes.NoElements.FirstOrDefault();

                    childElementInfo.ChildElementExistsOutputPin[i] = el != null;
                    i++;
                }
            }
            ConfigChanged = false;
        }
Exemple #3
0
        // method called each frame in vvvv
        public void Evaluate(int SpreadMax)
        {
            //if (Element.SliceCount == 0) return;

            if (!Element.IsChanged && !ConfigChanged && !XPathNamePin.IsChanged)
            {
                return;
            }

            Elements.SliceCount = Element.SliceCount;


            for (int i = 0; i < Element.SliceCount; i++)
            {
                try
                {
                    var element = Element[i];

                    if (!string.IsNullOrEmpty(XPathNamePin[0]) && element != null)
                    {
                        Elements[i] = element.XPathSelectElements(XPathNamePin[0], NamespaceResolver[0]).ToSpread();
                    }
                    else
                    {
                        Elements[i] = new Spread <XElement>(0);
                    }
                }
                catch (Exception e)
                {
                    Elements[i] = new Spread <XElement>(0);
                    FLogger.Log(e);
                }
            }

            var allElements = Elements.SelectMany(spread => spread).ToArray();

            // set slicecount to all element hits
            ElementsName.SliceCount = allElements.Length;

            #region process names
            int j = 0;
            foreach (var element in allElements)
            {
                ElementsName[j] = element.Name.ToString();
                j++;
            }
            #endregion process names

            #region process queries
            foreach (var query in FQueries.Values)
            {
                var queryExistsPin = query.QueryExistsContainer.IOObject;
                var queryPin       = query.QueryContainer.IOObject;
                var firstPin       = query.FirstContainer.IOObject;
                var allPin         = query.AllContainer.IOObject;

                queryExistsPin.Length = allElements.Length;
                queryPin.Length       = allElements.Length;
                firstPin.Length       = allElements.Length;
                allPin.Length         = allElements.Length;

                using (var queryExistsWriter = queryExistsPin.GetWriter())
                    using (var queryWriter = queryPin.GetWriter())
                        using (var firstWriter = firstPin.GetWriter())
                            using (var allWriter = allPin.GetWriter())
                            {
                                foreach (var element in allElements)
                                {
                                    XObject xobj = null;
                                    IEnumerable <XObject> xobjEnumerable = null;
                                    try
                                    {
                                        var node = (IEnumerable)element.XPathEvaluate(query.Name, NamespaceResolver[0]);
                                        xobjEnumerable = node.Cast <XObject>();
                                        xobj           = xobjEnumerable.FirstOrDefault();
                                    }
                                    catch (XPathException xe)
                                    {
                                        FLogger.Log(xe);
                                    }
                                    if (xobj != null)
                                    {
                                        if (xobj.NodeType == XmlNodeType.Attribute)
                                        {
                                            var attr = xobj as XAttribute;
                                            queryExistsWriter.Write(true);
                                            queryWriter.Write(attr.Value);
                                            firstWriter.Write(new XElement("NIL"));
                                            allWriter.Write(new MemoryIOStream <XElement>(0));
                                        }
                                        else
                                        {
                                            var el = xobj as XElement;
                                            queryExistsWriter.Write(true);
                                            queryWriter.Write(el.Value);
                                            firstWriter.Write(el);
                                            allWriter.Write(xobjEnumerable.Cast <XElement>().ToStream());
                                        }
                                    }
                                    else
                                    {
                                        queryWriter.Write("");
                                        queryExistsWriter.Write(false);
                                        firstWriter.Write(new XElement("NIL"));
                                        allWriter.Write(new MemoryIOStream <XElement>(0));
                                    }
                                }
                            }
            }
            #endregion process queries

            ConfigChanged = false;
        }