Esempio n. 1
0
        public override void Evaluate(XslTransformProcessor p)
        {
            if (p.Debugger != null)
            {
                p.Debugger.DebugExecute(p, base.DebugInput);
            }
            object            obj = p.Evaluate(this.select);
            XPathNodeIterator xpathNodeIterator = obj as XPathNodeIterator;

            if (xpathNodeIterator != null)
            {
                while (xpathNodeIterator.MoveNext())
                {
                    XPathNavigator nav = xpathNodeIterator.Current;
                    this.CopyNode(p, nav);
                }
            }
            else
            {
                XPathNavigator xpathNavigator = obj as XPathNavigator;
                if (xpathNavigator != null)
                {
                    this.CopyNode(p, xpathNavigator);
                }
                else
                {
                    p.Out.WriteString(XPathFunctions.ToString(obj));
                }
            }
        }
        public override void Evaluate(XslTransformProcessor p)
        {
            if (p.Debugger != null)
            {
                p.Debugger.DebugExecute(p, this.DebugInput);
            }

            object            o   = p.Evaluate(select);
            XPathNodeIterator itr = o as XPathNodeIterator;

            if (itr != null)
            {
                while (itr.MoveNext())
                {
                    CopyNode(p, itr.Current);
                }
            }
            else
            {
                XPathNavigator nav = o as XPathNavigator; // RTF
                if (nav != null)
                {
                    CopyNode(p, nav);
                }
                else
                {
                    p.Out.WriteString(XPathFunctions.ToString(o));
                }
            }
        }
Esempio n. 3
0
        // Invoked from XsltKey (XPathFunction)
        public BaseIterator Evaluate(BaseIterator iter,
                                     Expression valueExpr)
        {
            XPathNodeIterator i = iter;

            if (iter.CurrentPosition == 0)
            {
                i = iter.Clone();
                i.MoveNext();
            }
            XPathNavigator nav = i.Current;

            object            o   = valueExpr.Evaluate(iter);
            XPathNodeIterator it  = o as XPathNodeIterator;
            XsltContext       ctx = iter.NamespaceManager as XsltContext;

            BaseIterator result = null;

            if (it != null)
            {
                while (it.MoveNext())
                {
                    ArrayList nodes = GetNodesByValue(
                        nav, it.Current.Value, ctx);
                    if (nodes == null)
                    {
                        continue;
                    }
                    ListIterator tmp =
                        new ListIterator(nodes, ctx);
                    if (result == null)
                    {
                        result = tmp;
                    }
                    else
                    {
                        result = new UnionIterator(
                            iter, result, tmp);
                    }
                }
            }
            else
            {
                ArrayList nodes = GetNodesByValue(
                    nav, XPathFunctions.ToString(o), ctx);
                if (nodes != null)
                {
                    result = new ListIterator(nodes, ctx);
                }
            }

            return(result != null ? result : new NullIterator(iter));
        }
Esempio n. 4
0
        public BaseIterator Evaluate(BaseIterator iter, Expression valueExpr)
        {
            XPathNodeIterator xpathNodeIterator = iter;

            if (iter.CurrentPosition == 0)
            {
                xpathNodeIterator = iter.Clone();
                xpathNodeIterator.MoveNext();
            }
            XPathNavigator    xpathNavigator     = xpathNodeIterator.Current;
            object            obj                = valueExpr.Evaluate(iter);
            XPathNodeIterator xpathNodeIterator2 = obj as XPathNodeIterator;
            XsltContext       nsm                = iter.NamespaceManager as XsltContext;
            BaseIterator      baseIterator       = null;

            if (xpathNodeIterator2 != null)
            {
                while (xpathNodeIterator2.MoveNext())
                {
                    XPathNavigator xpathNavigator2 = xpathNodeIterator2.Current;
                    ArrayList      nodesByValue    = this.GetNodesByValue(xpathNavigator, xpathNavigator2.Value, nsm);
                    if (nodesByValue != null)
                    {
                        ListIterator listIterator = new ListIterator(nodesByValue, nsm);
                        if (baseIterator == null)
                        {
                            baseIterator = listIterator;
                        }
                        else
                        {
                            baseIterator = new UnionIterator(iter, baseIterator, listIterator);
                        }
                    }
                }
            }
            else if (xpathNavigator != null)
            {
                ArrayList nodesByValue2 = this.GetNodesByValue(xpathNavigator, XPathFunctions.ToString(obj), nsm);
                if (nodesByValue2 != null)
                {
                    baseIterator = new ListIterator(nodesByValue2, nsm);
                }
            }
            return((baseIterator == null) ? new NullIterator(iter) : baseIterator);
        }
Esempio n. 5
0
        private void CollectIndex(XPathNavigator nav, XPathNavigator target, Hashtable map, XslKey key)
        {
            switch (key.Use.ReturnType)
            {
            case XPathResultType.NodeSet:
            {
                XPathNodeIterator xpathNodeIterator = nav.Select(key.Use);
                while (xpathNodeIterator.MoveNext())
                {
                    XPathNavigator xpathNavigator = xpathNodeIterator.Current;
                    this.AddIndex(xpathNavigator.Value, target, map);
                }
                return;
            }

            case XPathResultType.Any:
            {
                object            obj = nav.Evaluate(key.Use);
                XPathNodeIterator xpathNodeIterator = obj as XPathNodeIterator;
                if (xpathNodeIterator != null)
                {
                    while (xpathNodeIterator.MoveNext())
                    {
                        XPathNavigator xpathNavigator2 = xpathNodeIterator.Current;
                        this.AddIndex(xpathNavigator2.Value, target, map);
                    }
                }
                else
                {
                    this.AddIndex(XPathFunctions.ToString(obj), target, map);
                }
                return;
            }
            }
            string key2 = nav.EvaluateString(key.Use, null, null);

            this.AddIndex(key2, target, map);
        }
Esempio n. 6
0
        private void CollectIndex(XPathNavigator nav, XPathNavigator target, Hashtable map, XslKey key)
        {
            XPathNodeIterator iter;

            switch (key.Use.ReturnType)
            {
            case XPathResultType.NodeSet:
                iter = nav.Select(key.Use);
                while (iter.MoveNext())
                {
                    AddIndex(iter.Current.Value, target, map);
                }
                break;

            case XPathResultType.Any:
                object o = nav.Evaluate(key.Use);
                iter = o as XPathNodeIterator;
                if (iter != null)
                {
                    while (iter.MoveNext())
                    {
                        AddIndex(iter.Current.Value, target, map);
                    }
                }
                else
                {
                    AddIndex(XPathFunctions.ToString(o), target, map);
                }
                break;

            default:
                string keyValue = nav.EvaluateString(key.Use, null, null);
                AddIndex(keyValue, target, map);
                break;
            }
        }
Esempio n. 7
0
        public TextElements FindByXPathOld(string xpath)
        {
            var            elements   = new TextElements();
            XPathFunctions fn         = new XPathFunctions();
            var            xpathblock = XPathItem.Parse(xpath);
            XPathActions   actions    = new XPathActions();

            actions.XPathFunctions = new XPathFunctions();
            for (int i = 0; i < xpathblock.XPathBlocks.Count; i++)
            {
                var xblock = xpathblock.XPathBlocks[i];
                if (i == 0)
                {
                    elements = FindByXPath(xblock);
                }
                else
                {
                    TextElements newelements = new TextElements();
                    for (int j = 0; j < elements.Count; j++)
                    {
                        var elem      = elements[j];
                        var nextelems = elem.FindByXPath(xblock);
                        for (int k = 0; k < nextelems.Count; k++)
                        {
                            if (newelements.Contains(nextelems[k]))
                            {
                                continue;
                            }
                            newelements.Add(nextelems[k]);
                        }
                    }
                    elements = newelements;
                }
            }
            return(elements);
        }