public object @double(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(XmlConvert.ToDouble(arg.Current.Value));
        }
        public object @duration(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(XmlConvert.ToString(XmlConvert.ToTimeSpan(arg.Current.Value)));
        }
        public object @string(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(arg.Current.Value);
        }
        public object dateTime(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(XmlConvert.ToString(XmlConvert.ToDateTimeOffset(arg.Current.Value), DateTimeFormat));
        }
        public object @integer(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(Decimal.Parse(arg.Current.Value, NumberStyles.Integer, NumberFormatInfo.InvariantInfo));
        }
Exemplo n.º 6
0
        protected object document_uri(XPathNodeIterator iter)
        {
            // fn:document-uri($arg as node()?) as xs:anyURI?

            XPathNavigator node;

            if (ExtensionObjectConvert.IsEmpty(iter) ||
                !iter.MoveNext() ||
                (node = iter.Current).NodeType != XPathNodeType.Root)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(node.BaseURI);
        }
Exemplo n.º 7
0
        protected string string_join(object arg, string separator)
        {
            // fn:string-join($arg1 as xs:string*, $arg2 as xs:string) as xs:string

            XPathNodeIterator iter = arg as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item
                return(arg.ToString());
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return("");
            }

            return(String.Join(separator, iter.Cast <XPathNavigator>().Select(n => n.Value)));
        }
Exemplo n.º 8
0
        public object avg(object args)
        {
            // fn:avg($arg as xs:anyAtomicType*) as xs:anyAtomicType?

            XPathNodeIterator iter = args as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item, return unchanged
                return(args);
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(iter.Cast <XPathNavigator>().Select(n => n.ValueAsDouble).Average());
        }
Exemplo n.º 9
0
        public object min(object arg)
        {
            // fn:min($arg as xs:anyAtomicType*) as xs:anyAtomicType?

            XPathNodeIterator iter = arg as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item, return unchanged
                return(arg);
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(iter.Cast <XPathNavigator>().Min(n => n.TypedValue));
        }
Exemplo n.º 10
0
        public object head(object arg)
        {
            // fn:head($arg as item()*) as item()?

            XPathNodeIterator iter = arg as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item
                return(arg);
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(ExtensionObjectConvert.ToXPathNavigator(iter));
        }
Exemplo n.º 11
0
        private object reverse(object arg)
        {
            // fn:reverse($arg as item()*) as item()*

            // TODO: XslCompiledTransform seems to reorder node-sets in document order

            XPathNodeIterator iter = arg as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item
                return(arg);
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(iter.Cast <XPathNavigator>().Reverse().ToArray());
        }
Exemplo n.º 12
0
        public object data(object arg)
        {
            // fn:data($arg as item()*) as xs:anyAtomicType*

            XPathNodeIterator iter = arg as XPathNodeIterator;

            if (iter == null)
            {
                // if not iterator then it's a single item, return unchanged
                return(arg);
            }

            if (ExtensionObjectConvert.IsEmpty(iter))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            if (iter.Count == 1)
            {
                return(iter.Cast <XPathNavigator>().Single().TypedValue);
            }

            return(ExtensionObjectConvert.ToInput(iter.Cast <XPathNavigator>().Select(n => n.TypedValue)));
        }
Exemplo n.º 13
0
 public bool empty(object arg)
 {
     // fn:empty($arg as item()*) as xs:boolean
     return(ExtensionObjectConvert.IsEmpty(arg));
 }