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))); }
protected object static_base_uri() { // fn:static-base-uri() as xs:anyURI? Uri uri = static_base_uri_impl(); return(ExtensionObjectConvert.ToInputOrEmpty(uri)); }
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))); }
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))); }
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); }
public object @duration(XPathNodeIterator arg) { if (ExtensionObjectConvert.IsEmpty(arg)) { return(ExtensionObjectConvert.EmptyIterator); } arg.MoveNext(); return(XmlConvert.ToString(XmlConvert.ToTimeSpan(arg.Current.Value))); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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); }
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()); }
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)))); }
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)); }
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)); }
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); }
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)); }
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); }
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); }
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); }
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)); }
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()); }
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))); }