bool GetBestNamespaceEntry(string[] path, int length, bool createPath, bool caseSensitive, out NamespaceEntry lastEntry, out int numMatched)
        {
            lastEntry = rootNamespace;

            if (length == 0 || (length == 1 && path[0] == "")) {
                numMatched = length;
                return true;
            }
            else
            {
                for (int n=0; n<length; n++) {
                    NamespaceEntry nh = lastEntry.GetNamespace (path[n], caseSensitive);
                    if (nh == null) {
                        if (!createPath) {
                            numMatched = n;
                            return false;
                        }

                        nh = new NamespaceEntry ();
                        lastEntry.Add (path[n], nh);
                    }
                    lastEntry = nh;
                }
                numMatched = length;
                return true;
            }
        }