Exemplo n.º 1
0
        public object path(XPathNodeIterator arg)
        {
            // fn:path($arg as node()?) as xs:string?

            XPathNavigator node = ExtensionObjectConvert.ToXPathNavigator(arg);

            if (node == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            var reverseBuffer = new List <string>();

            XPathNavigator clone = node.Clone();

            path_impl(clone, reverseBuffer);

            if (reverseBuffer.Count == 1)
            {
                return(reverseBuffer[0]);
            }

            // replace document-node path expr with empty string
            // so join operation doesn't create //
            if (reverseBuffer[reverseBuffer.Count - 1] == "/")
            {
                reverseBuffer[reverseBuffer.Count - 1] = "";
            }

            return(String.Join("/", Enumerable.Reverse(reverseBuffer)));
        }
Exemplo n.º 2
0
        protected object static_base_uri()
        {
            // fn:static-base-uri() as xs:anyURI?

            Uri uri = static_base_uri_impl();

            return(ExtensionObjectConvert.ToInputOrEmpty(uri));
        }
Exemplo n.º 3
0
        public string replace(object input, string pattern, string replacement, string flags)
        {
            // fn:replace($input as xs:string?, $pattern as xs:string, $replacement as xs:string, $flags as xs:string) as xs:string

            string inputStr = ExtensionObjectConvert.ToString(input) ?? "";

            return(Regex.Replace(inputStr, pattern, replacement, ParseFlags(flags)));
        }
Exemplo n.º 4
0
        public bool matches(object input, string pattern, string flags)
        {
            // fn:matches($input	as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:boolean

            string inputStr = ExtensionObjectConvert.ToString(input) ?? "";

            return(Regex.IsMatch(inputStr, pattern, ParseFlags(flags)));
        }
Exemplo n.º 5
0
        protected bool ends_with(object arg1, object arg2)
        {
            // fn:ends-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean

            string first  = ExtensionObjectConvert.ToString(arg1) ?? "";
            string second = ExtensionObjectConvert.ToString(arg2) ?? "";

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

            arg.MoveNext();

            return(XmlConvert.ToDouble(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));
        }
        public object @string(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(arg.Current.Value);
        }
Exemplo n.º 10
0
        public object @duration(XPathNodeIterator arg)
        {
            if (ExtensionObjectConvert.IsEmpty(arg))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            arg.MoveNext();

            return(XmlConvert.ToString(XmlConvert.ToTimeSpan(arg.Current.Value)));
        }
Exemplo n.º 11
0
        protected object round_half_to_even(object arg, int precision)
        {
            // fn:round-half-to-even($arg as numeric?, $precision as xs:integer) as numeric?

            double?value = ExtensionObjectConvert.ToNullableDouble(arg);

            if (value == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(Math.Round(value.Value, precision, MidpointRounding.ToEven));
        }
Exemplo n.º 12
0
        protected string encode_for_uri(object arg)
        {
            // fn:encode-for-uri($uri-part as xs:string?) as xs:string

            string value = ExtensionObjectConvert.ToString(arg);

            if (value == null)
            {
                return("");
            }

            return(Uri.EscapeDataString(value));
        }
Exemplo n.º 13
0
        protected object base_uri(XPathNodeIterator arg)
        {
            // fn:base-uri($arg as node()?) as xs:anyURI?

            XPathNavigator node = ExtensionObjectConvert.ToXPathNavigator(arg);

            if (node == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(node.BaseURI);
        }
Exemplo n.º 14
0
        protected object resolve_uri(object relativeUri)
        {
            string relativeUriStr = ExtensionObjectConvert.ToString(relativeUri);

            if (relativeUriStr == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            Uri resolvedUri = resolve_uri_impl(relativeUriStr, static_base_uri_impl());

            return(ExtensionObjectConvert.ToInput(resolvedUri));
        }
Exemplo n.º 15
0
        public object pow(object x, double y)
        {
            // math:pow($x as xs:double?, $y as numeric) as xs:double?

            double?xVal = ExtensionObjectConvert.ToNullableDouble(x);

            if (xVal == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(Math.Pow(xVal.Value, y));
        }
Exemplo n.º 16
0
        public object cos(object arg)
        {
            // math:cos($θ as xs:double?) as xs:double?

            double?value = ExtensionObjectConvert.ToNullableDouble(arg);

            if (value == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(Math.Cos(value.Value));
        }
Exemplo n.º 17
0
        public object abs(object arg)
        {
            // fn:abs($arg as numeric?) as numeric?

            double?value = ExtensionObjectConvert.ToNullableDouble(arg);

            if (value == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(Math.Abs(value.Value));
        }
Exemplo n.º 18
0
        protected bool has_children(XPathNodeIterator arg)
        {
            //fn:has-children($node as node()?) as xs:boolean

            XPathNavigator node = ExtensionObjectConvert.ToXPathNavigator(arg);

            if (node == null)
            {
                return(false);
            }

            return(node.HasChildren);
        }
Exemplo n.º 19
0
        protected string upper_case(object arg)
        {
            // fn:upper-case($arg as xs:string?) as xs:string

            string str = ExtensionObjectConvert.ToString(arg);

            if (str == null)
            {
                return("");
            }

            return(str.ToUpper());
        }
Exemplo n.º 20
0
        public object tokenize(object input, string pattern, string flags)
        {
            // fn:tokenize($input as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:string*

            string inputStr = ExtensionObjectConvert.ToString(input);

            if (!inputStr.HasValue())
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(ExtensionObjectConvert.ToInput(Regex.Split(inputStr, pattern, ParseFlags(flags))));
        }
Exemplo n.º 21
0
        public object exp10(object arg)
        {
            // math:exp10($arg as xs:double?) as xs:double?

            double?value = ExtensionObjectConvert.ToNullableDouble(arg);

            if (value == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(Math.Pow(10, value.Value));
        }
Exemplo n.º 22
0
        public object compare(object comparand1, object comparand2)
        {
            // fn:compare($comparand1 as xs:string?, $comparand2 as xs:string?) as xs:integer?

            string first  = ExtensionObjectConvert.ToString(comparand1);
            string second = ExtensionObjectConvert.ToString(comparand2);

            if (first == null ||
                second == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(String.Compare(first, second));
        }
Exemplo n.º 23
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.º 24
0
        protected object resolve_uri(object relativeUri, string baseUri)
        {
            // fn:resolve-uri($relative as xs:string?, $base as xs:string) as xs:anyURI?

            string relativeUriStr = ExtensionObjectConvert.ToString(relativeUri);

            if (relativeUriStr == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            Uri baseU       = new Uri(baseUri, UriKind.Absolute);
            Uri resolvedUri = resolve_uri_impl(relativeUriStr, baseU);

            return(ExtensionObjectConvert.ToInput(resolvedUri));
        }
Exemplo n.º 25
0
        public object root(XPathNodeIterator arg)
        {
            // fn:root($arg as node()?) as node()?

            XPathNavigator node = ExtensionObjectConvert.ToXPathNavigator(arg);

            if (node == null)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            XPathNavigator clone = node.Clone();

            clone.MoveToRoot();

            return(clone);
        }
Exemplo n.º 26
0
        public object nilled(XPathNodeIterator iter)
        {
            // fn:nilled($arg as node()?) as xs:boolean?

            XPathNavigator node = ExtensionObjectConvert.ToXPathNavigator(iter);

            if (node == null ||
                node.NodeType != XPathNodeType.Element)
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            IXmlSchemaInfo schemaInfo = node.SchemaInfo;

            return(schemaInfo != null &&
                   schemaInfo.IsNil);
        }
Exemplo n.º 27
0
        protected object namespace_uri_for_prefix(object prefix, XPathNavigator element)
        {
            // fn:namespace-uri-for-prefix($prefix as xs:string?, $element as element()) as xs:anyURI?

            IDictionary <string, string> namespaces = element.GetNamespacesInScope(XmlNamespaceScope.All);

            string p = ExtensionObjectConvert.ToString(prefix) ?? "";

            string ns;

            if (!namespaces.TryGetValue(p, out ns))
            {
                return(ExtensionObjectConvert.EmptyIterator);
            }

            return(ns);
        }
Exemplo n.º 28
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.º 29
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.º 30
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)));
        }