コード例 #1
0
        public void IsTrue(string fileSource)
        {
            StreamReader read;
            read = File.OpenText(fileSource);
            Stack<string> htmlTags = new Stack<string>(100);
            Html htmlOp = new Html();
            string line;
            while ((line = read.ReadLine()) != null)
            {

                string temp = "";
                for (int i = 0; i < line.Length; i++)
                {

                    temp = "";

                    while (line[i] == '<') // tag açıldığı sürece devam et
                    {
                        while (line[i] != '>') // tag kapanıncaya kadar gerçekleştir
                        {
                            temp += line[i]; // karakteri geçici değerle birleştir
                            i++;
                            if (line.Length != i) // satırın sonuna ulaşmadıysak
                            {
                                if (line[i] == '>')  // i. index 'te tag kapanıyorsa büyüktür işaretini temp'e ekle
                                {
                                    temp += ">";
                                }
                            }
                            else if (line[line.Length - 1] != '>') // satırın sonunda tag kapanmadıysa
                            {
                                line = read.ReadLine();           //alt satırdan devam et
                                i = 0; // line'nın indexini başa getirmek için
                                temp += " "; //  tag ile attribute arasını açmak için

                            }
                        }

                        ///kontrol kısmı
                        if (!temp.Contains("!DOCTYPE html") && !temp.Contains("br") && !temp.Contains("meta") && !temp.Contains("img")) // tag bu etiketlerden farklı ise kontrol et
                        {

                            htmlTags.Push(htmlOp.CutAttribute(temp));  // taglarin attribute'lerini kes ve stack'e at
                            Console.WriteLine(temp);
                            if (htmlTags.Count() == 1)
                            {
                                if (temp != "<html>")  // html tagından önce ve ya sonra tag olup olmadığının kontrolü
                                {
                                    Console.WriteLine("Geçersiz");
                                    return;
                                }
                            }

                            else if (htmlTags.Count() > 1)
                            {
                                string temp2 = htmlTags.Pop();  // stack'ten iki tane tag çıkar
                                string temp1 = htmlTags.Pop();

                                if (temp2.Contains("/")) // kapalı tag geldiyse (ilk giren son çıktığı için ilk önce pop edilen kapalı etiket olması gerekir)
                                {
                                    if (temp2.Replace("/", "") != temp1) // kapalı tag'daki '/' karakterini kaldırınca eşi olmazsa
                                    {
                                        // taglar doğru kapanmadıysa pop yapılan iki tag'i geri at
                                        htmlTags.Push(temp1);
                                        htmlTags.Push(temp2);
                                    }
                                }
                                else
                                {   // kapalı tag gelmediyse pop yapılan iki tag'i geri at
                                    htmlTags.Push(temp1);
                                    htmlTags.Push(temp2);
                                }

                            }

                        }
                        ///kontrol kısmı
                        i--;
                    }

                }
            }

            read.Close();

            if (htmlTags.IsEmpty())
            {
                Console.WriteLine("Geçerli");
            }
            else
            {
                Console.WriteLine("Geçersiz");
            }
            Console.ReadLine();
        }
コード例 #2
0
 static void Main(string[] args)
 {
     Html html = new Html();
     html.IsTrue(@"C:\testData.html");
 }