public static XPathSequence FnIndexOf(XQueryContext ctx, XPathSequence items, XPathItem item, CultureInfo ci)
        {
            ArrayList   al = new ArrayList();
            IEnumerator e  = items.GetEnumerator();

            for (int i = 0; e.MoveNext(); i++)
            {
                XPathItem iter = e.Current as XPathItem;
                if (iter.XmlType.TypeCode == XmlTypeCode.String)
                {
                    if (ci.CompareInfo.Compare(iter.Value, item.Value) == 0)
                    {
                        al.Add(i);
                    }
                }
                else
                {
                    IComparable ic = (IComparable)iter.TypedValue;
                    if (ic.CompareTo((IComparable)item.TypedValue) == 0)
                    {
                        al.Add(i);
                    }
                }
            }
            return(new ListIterator(ctx, al));
        }
        public static string [] FnInScopePrefixes(XQueryContext context)
        {
            IDictionary dict = context.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml);
            ArrayList   keys = new ArrayList(dict.Keys);

            return(keys.ToArray(typeof(string)) as string []);
        }
        public static string FnString(XQueryContext context)
        {
            XPathItem item = context.CurrentItem;

            if (item == null)
            {
                throw new ArgumentException("FONC0001: undefined context item");
            }
            return(FnString(item));
        }
 public static XPathNavigator FnRoot(XQueryContext ctx)
 {
     if (ctx.CurrentItem == null)
     {
         throw new XmlQueryException("FONC0001: Undefined context item.");
     }
     if (ctx.CurrentNode == null)
     {
         throw new XmlQueryException("FOTY0011: Context item is not a node.");
     }
     return(FnRoot(ctx.CurrentNode));
 }
예제 #5
0
		public void Execute (XPathNavigator input, XmlResolver resolver, XmlArgumentList args, XmlWriter writer)
		{
			if (staticContext == null)
				throw new XmlQueryException ("Query string is not compiled.");
			// Initialize event handler method info.
			xqueryCommandOnMessageEventMethod = null;

			XQueryContext ctx = new XQueryContext (new XQueryContextManager (staticContext, input, writer, resolver, args));

			XPathSequence iter = new SingleItemIterator (input, ctx);

			foreach (ExprSingle expr in staticContext.QueryBody)
				expr.Serialize (iter);
		}
예제 #6
0
        public void PushCurrentSequence(XPathSequence sequence)
        {
            if (sequence == null)
            {
                throw new ArgumentNullException();
            }
//			sequence = sequence.Clone ();
#if SEEMS_CONTEXT_FOR_CURRENT_REQURED
            contextStack.Push(currentContext);
            currentsequence = sequence;
            currentContext  = new XQueryContext(this);
#else
            contextSequenceStack.Push(currentSequence);
            currentSequence = sequence;
#endif
        }
예제 #7
0
        public void Execute(XPathNavigator input, XmlResolver resolver, XmlArgumentList args, XmlWriter writer)
        {
            if (staticContext == null)
            {
                throw new XmlQueryException("Query string is not compiled.");
            }
            // Initialize event handler method info.
            xqueryCommandOnMessageEventMethod = null;

            XQueryContext ctx = new XQueryContext(new XQueryContextManager(staticContext, input, writer, resolver, args));

            XPathSequence iter = new SingleItemIterator(input, ctx);

            foreach (ExprSingle expr in staticContext.QueryBody)
            {
                expr.Serialize(iter);
            }
        }
        public static XPathNavigator FnDoc(XQueryContext ctx, string uri)
        {
            XmlResolver res           = ctx.ContextManager.ExtDocResolver;
            string      baseUriString = ctx.StaticContext.BaseUri;
            Uri         baseUri       = null;

            if (baseUriString != null && baseUriString != String.Empty)
            {
                baseUri = new Uri(baseUriString);
            }
            Uri    relUri = res.ResolveUri(baseUri, uri);
            Stream s      = res.GetEntity(relUri, null, typeof(Stream)) as Stream;

            try {
                XPathDocument doc = new XPathDocument(new XmlValidatingReader(new XmlTextReader(s)), XmlSpace.Preserve);
                return(doc.CreateNavigator());
            } finally {
                s.Close();
            }
        }
예제 #9
0
		internal XQueryContextManager (XQueryStaticContext ctx, XPathItem input, XmlWriter writer, XmlResolver resolver, XmlArgumentList args)
		{
			this.input = input;
			this.staticContext = ctx;
			this.args = args;
			currentWriter = writer;
			this.extDocResolver = resolver;

			namespaceManager = new XmlNamespaceManager (ctx.NameTable);
			foreach (DictionaryEntry de in ctx.NSResolver.GetNamespacesInScope (XmlNamespaceScope.ExcludeXml))
				namespaceManager.AddNamespace (de.Key.ToString (), de.Value.ToString ());
			namespaceManager.PushScope ();

			currentContext = new XQueryContext (this, null, new Hashtable ());
			if (input != null) {
				currentSequence = new SingleItemIterator (input, currentContext);
				currentSequence.MoveNext ();
			}
			currentContext = new XQueryContext (this, currentSequence, new Hashtable ());
		}
        public static object FnTrace(XQueryContext ctx, object value, string label)
        {
            if (value == null)
            {
                return(new XPathEmptySequence(ctx));
            }
            XPathSequence seq = value as XPathSequence;

            if (seq == null)
            {
                XPathAtomicValue av = value as XPathAtomicValue;
                if (av == null)
                {
                    av = new XPathAtomicValue(value,
                                              InternalPool.GetBuiltInType(
                                                  InternalPool.XmlTypeCodeFromRuntimeType(
                                                      value.GetType(), true)));
                }
                seq = new SingleItemIterator(av, ctx);
            }
            return(new TracingIterator(seq, label));
        }
예제 #11
0
        internal XQueryContextManager(XQueryStaticContext ctx, XPathItem input, XmlWriter writer, XmlResolver resolver, XmlArgumentList args)
        {
            this.input          = input;
            this.staticContext  = ctx;
            this.args           = args;
            currentWriter       = writer;
            this.extDocResolver = resolver;

            namespaceManager = new XmlNamespaceManager(ctx.NameTable);
            foreach (DictionaryEntry de in ctx.NSResolver.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml))
            {
                namespaceManager.AddNamespace(de.Key.ToString(), de.Value.ToString());
            }
            namespaceManager.PushScope();

            currentContext = new XQueryContext(this, null, new Hashtable());
            if (input != null)
            {
                currentSequence = new SingleItemIterator(input, currentContext);
                currentSequence.MoveNext();
            }
            currentContext = new XQueryContext(this, currentSequence, new Hashtable());
        }
예제 #12
0
		public static string FnNormalizeSpace (XQueryContext ctx)
		{
			return FnNormalizeSpace (FnString (ctx));
		}
예제 #13
0
		public static bool FnEndsWith (XQueryContext ctx, string arg1, string arg2, string collation)
		{
			return FnEndsWith (arg1, arg2, ctx.GetCulture (collation));
		}
예제 #14
0
		public static object FnTrace (XQueryContext ctx, object value, string label)
		{
			if (value == null)
				return new XPathEmptySequence (ctx);
			XPathSequence seq = value as XPathSequence;
			if (seq == null) {
				XPathAtomicValue av = value as XPathAtomicValue;
				if (av == null)
					av = new XPathAtomicValue (value,
						InternalPool.GetBuiltInType (
							InternalPool.XmlTypeCodeFromRuntimeType (
								value.GetType (), true)));
				seq = new SingleItemIterator (av, ctx);
			}
			return new TracingIterator (seq, label);
		}
예제 #15
0
		public static int FnCompare (XQueryContext ctx, string s1, string s2, string collation)
		{
			return FnCompare (s1, s2, ctx.GetCulture (collation));
		}
 public static string FnNormalizeSpace(XQueryContext ctx)
 {
     return(FnNormalizeSpace(FnString(ctx)));
 }
 public static int FnCompare(XQueryContext ctx, string s1, string s2, string collation)
 {
     return(FnCompare(s1, s2, ctx.GetCulture(collation)));
 }
 public static object FnNamespaceUriForPrefix(XQueryContext context, string prefix)
 {
     return(prefix != null?context.LookupNamespace(prefix) : null);
 }
예제 #19
0
		public static double FnNumber (XQueryContext ctx)
		{
			return FnNumber (ctx.CurrentItem);
		}
 public static string FnSubstringAfter(XQueryContext ctx, string arg1, string arg2, string collation)
 {
     return(FnSubstringAfter(arg1, arg2, ctx.GetCulture(collation)));
 }
 public static string FnResolveUri(XQueryContext ctx, string relUri)
 {
     return(new Uri(new Uri(ctx.StaticContext.BaseUri), relUri).ToString());
 }
 public static string FnSubstringAfter(XQueryContext ctx, string arg1, string arg2)
 {
     return(FnSubstringAfter(arg1, arg2, ctx.DefaultCollation));
 }
 public static bool FnEndsWith(XQueryContext ctx, string arg1, string arg2, string collation)
 {
     return(FnEndsWith(arg1, arg2, ctx.GetCulture(collation)));
 }
 public static bool FnEndsWith(XQueryContext ctx, string arg1, string arg2)
 {
     return(FnEndsWith(arg1, arg2, ctx.DefaultCollation));
 }
예제 #25
0
		public static string FnSubstringAfter (XQueryContext ctx, string arg1, string arg2, string collation)
		{
			return FnSubstringAfter (arg1, arg2, ctx.GetCulture (collation));
		}
예제 #26
0
		public static XPathSequence FnIndexOf (XQueryContext ctx, XPathSequence items, XPathItem item, CultureInfo ci)
		{
			ArrayList al = new ArrayList ();
			IEnumerator e = items.GetEnumerator ();
			for (int i = 0; e.MoveNext (); i++) {
				XPathItem iter = e.Current as XPathItem;
				if (iter.XmlType.TypeCode == XmlTypeCode.String) {
					if (ci.CompareInfo.Compare (iter.Value, item.Value) == 0)
						al.Add (i);
				}
				else {
					IComparable ic = (IComparable) iter.TypedValue;
					if (ic.CompareTo ((IComparable) item.TypedValue) == 0)
						al.Add (i);
				}
			}
			return new ListIterator (ctx, al);
		}
예제 #27
0
		public static object FnNamespaceUriForPrefix (XQueryContext context, string prefix)
		{
			return prefix != null ? context.LookupNamespace (prefix) : null;
		}
예제 #28
0
		public static object FnDeepEqual (XQueryContext ctx, XPathSequence p1, XPathSequence p2)
		{
			return FnDeepEqualImpl (p1, p2, ctx.DefaultCollation);
		}
예제 #29
0
		public static XPathNavigator FnRoot (XQueryContext ctx)
		{
			if (ctx.CurrentItem == null)
				throw new XmlQueryException ("FONC0001: Undefined context item.");
			if (ctx.CurrentNode == null)
				throw new XmlQueryException ("FOTY0011: Context item is not a node.");
			return FnRoot (ctx.CurrentNode);
		}
 public static int FnStringLength(XQueryContext ctx)
 {
     return(FnString(ctx).Length);
 }
예제 #31
0
		public static XPathSequence FnDistinctValues (XQueryContext ctx, XPathSequence items, string collation)
		{
			return FnDistinctValuesImpl (ctx, items, ctx.GetCulture (collation));
		}
 public static double FnNumber(XQueryContext ctx)
 {
     return(FnNumber(ctx.CurrentItem));
 }
예제 #33
0
		public static object FnMin (XQueryContext ctx, XPathSequence e)
		{
			return FnMinImpl (e, ctx.DefaultCollation);
		}
 public static bool FnLang(XQueryContext ctx, string testLang)
 {
     return(FnLang(testLang, ctx.CurrentNode));
 }
예제 #35
0
		public static string FnString (XQueryContext context)
		{
			XPathItem item = context.CurrentItem;
			if (item == null)
				throw new ArgumentException ("FONC0001: undefined context item");
			return FnString (item);
		}
 public static XPathSequence FnCollection(XQueryContext ctx, string name)
 {
     return(ctx.ResolveCollection(name));
 }
예제 #37
0
		public static int FnCompare (XQueryContext ctx, string s1, string s2)
		{
			return FnCompare (s1, s2, ctx.DefaultCollation);
		}
 public static XPathSequence FnIndexOf(XQueryContext ctx, XPathSequence items, XPathItem item)
 {
     return(FnIndexOf(ctx, items, item, ctx.DefaultCollation));
 }
예제 #39
0
		public static int FnStringLength (XQueryContext ctx)
		{
			return FnString (ctx).Length;
		}
 public static object FnIdRef(XQueryContext ctx, string arg)
 {
     return(FnIdRef(arg, ctx.CurrentNode));
 }
예제 #41
0
		public static bool FnEndsWith (XQueryContext ctx, string arg1, string arg2)
		{
			return FnEndsWith (arg1, arg2, ctx.DefaultCollation);
		}
 public static XPathSequence FnDistinctValues(XQueryContext ctx, XPathSequence items)
 {
     return(FnDistinctValuesImpl(ctx, items, ctx.DefaultCollation));
 }
예제 #43
0
		public static string FnSubstringAfter (XQueryContext ctx, string arg1, string arg2)
		{
			return FnSubstringAfter (arg1, arg2, ctx.DefaultCollation);
		}
 public static XPathSequence FnDistinctValues(XQueryContext ctx, XPathSequence items, string collation)
 {
     return(FnDistinctValuesImpl(ctx, items, ctx.GetCulture(collation)));
 }
예제 #45
0
		public static string FnResolveUri (XQueryContext ctx, string relUri)
		{
			return new Uri (new Uri (ctx.StaticContext.BaseUri), relUri).ToString ();
		}
 private static XPathSequence FnDistinctValuesImpl(XQueryContext ctx, XPathSequence items, CultureInfo collation)
 {
     return(new DistinctValueIterator(ctx, items, collation));
 }
예제 #47
0
		public static string [] FnInScopePrefixes (XQueryContext context)
		{
			IDictionary dict = context.GetNamespacesInScope (XmlNamespaceScope.ExcludeXml);
			ArrayList keys = new ArrayList (dict.Keys);
			return keys.ToArray (typeof (string)) as string [];
		}
 public static object FnDeepEqual(XQueryContext ctx, XPathSequence p1, XPathSequence p2)
 {
     return(FnDeepEqualImpl(p1, p2, ctx.DefaultCollation));
 }
예제 #49
0
		public static bool FnLang (XQueryContext ctx, string testLang)
		{
			return FnLang (testLang, ctx.CurrentNode);
		}
 public static object FnDeepEqual(XQueryContext ctx, XPathSequence p1, XPathSequence p2, string collation)
 {
     return(FnDeepEqualImpl(p1, p2, ctx.GetCulture(collation)));
 }
예제 #51
0
		public static XPathSequence FnIndexOf (XQueryContext ctx, XPathSequence items, XPathItem item)
		{
			return FnIndexOf (ctx, items, item, ctx.DefaultCollation);
		}
 public static XPathNavigator FnId(XQueryContext ctx, string id)
 {
     return(FnId(id, ctx.CurrentNode));
 }
예제 #53
0
		public static XPathSequence FnDistinctValues (XQueryContext ctx, XPathSequence items)
		{
			return FnDistinctValuesImpl (ctx, items, ctx.DefaultCollation);
		}
예제 #54
0
		public static object FnIdRef (XQueryContext ctx, string arg)
		{
			return FnIdRef (arg, ctx.CurrentNode);
		}
예제 #55
0
		private static XPathSequence FnDistinctValuesImpl (XQueryContext ctx, XPathSequence items, CultureInfo collation)
		{
			return new DistinctValueIterator (ctx, items, collation);
		}
예제 #56
0
		public static XPathNavigator FnDoc (XQueryContext ctx, string uri)
		{
			XmlResolver res = ctx.ContextManager.ExtDocResolver;
			string baseUriString = ctx.StaticContext.BaseUri;
			Uri baseUri = null;
			if (baseUriString != null && baseUriString != String.Empty)
				baseUri = new Uri (baseUriString);
			Uri relUri = res.ResolveUri (baseUri, uri);
			Stream s = res.GetEntity (relUri, null, typeof (Stream)) as Stream;
			try {
				XPathDocument doc = new XPathDocument (new XmlValidatingReader (new XmlTextReader (s)), XmlSpace.Preserve);
				return doc.CreateNavigator ();
			} finally {
				s.Close ();
			}
		}
예제 #57
0
		public static object FnDeepEqual (XQueryContext ctx, XPathSequence p1, XPathSequence p2, string collation)
		{
			return FnDeepEqualImpl (p1, p2, ctx.GetCulture (collation));
		}
예제 #58
0
		public static XPathSequence FnCollection (XQueryContext ctx, string name)
		{
			return ctx.ResolveCollection (name);
		}
예제 #59
0
		public static object FnMin (XQueryContext ctx, XPathSequence e, string collation)
		{
			return FnMinImpl (e, ctx.GetCulture (collation));
		}
 public static int FnCompare(XQueryContext ctx, string s1, string s2)
 {
     return(FnCompare(s1, s2, ctx.DefaultCollation));
 }