Exemple #1
0
        /// <summary>
        /// Metoda wyliczająca maksymalną ilość punktów jaką można zdobyć przy porównaniu z danym węzłem
        /// </summary>
        /// <param name="element">obiekt WezelXML</param>
        public static int MaxPunktow(WezelXML element)
        {
            int punkty = 0;

            //atrybuty - 20 za każdy
            punkty+=element.Element.Attributes().Count()*20;

            //dzieci - 50 za każde
            punkty += element.Element.Elements().Count() * 50;

            // wartosc elementu
            if (Compare.WartoscElementu(element.Element)!="")
            {
                punkty += 150;
            }

            // nazwa elementu
            if (Diff.IgnorujNazwy == true)
            {
                punkty += 150;
            }
            // przestrzen nazw
            if (Diff.SprawdzacPrzestrzen==true)
            {
                punkty += 100;
            }
            return punkty;
        }
Exemple #2
0
 /// <summary>
 /// Metoda wydobywająca z obiektu WezelXML informacje o jego lokalizacji
 /// </summary>
 /// <param name="wezel">obiekt WezelXML</param>
 public static PositionInfo Pozycja(WezelXML wezel)
 {
     if (wezel.Element is IXmlLineInfo)
     {
         IXmlLineInfo info = wezel.Element as IXmlLineInfo;
         PositionInfo pozycja = new PositionInfo(info.LineNumber, info.LinePosition);
         return pozycja;
     }
     return null;
 }
Exemple #3
0
        public void Informacje()
        {
            XElement element = new XElement("Root",
                new XElement("el1", "Some text"),
                new XElement("el2", "Some text")
            );
            WezelXML wezel = new WezelXML(element);

            Assert.IsFalse(wezel.Odnaleziony);
            Assert.IsTrue(wezel.Istotny);
            Assert.AreSame(wezel.Element, element);
            Assert.AreEqual(wezel.Sciezka, "/Root[1]");
        }
Exemple #4
0
        public void JestDzieckiem()
        {
            XElement element = new XElement("Root",
                new XElement("el1", "Some text"),
                new XElement("el2", "Some text")
            );
            WezelXML wezel = new WezelXML((XElement)element.LastNode);

            Assert.IsTrue(wezel.JestDzieckiem("/Root[1]"));
            Assert.IsFalse(wezel.JestDzieckiem("/Root[2]"));

            wezel = new WezelXML(element);
            Assert.IsFalse(wezel.JestDzieckiem("/Root[1]"));
        }
Exemple #5
0
        public void ZmianaRodzica()
        {
            XElement element = new XElement("Root",
                new XElement("el1", "Some text"),
                new XElement("el2", "Some text")
            );
            WezelXML wezel = new WezelXML((XElement)element.LastNode);
            wezel.ZmianaRodzica("/Root[1]", "/Root[2]");

            Assert.AreEqual(wezel.Sciezka, "/Root[2]/el2[1]");

            wezel.ZmianaRodzica("/Root[1]", "/Root[2]");

            Assert.AreEqual(wezel.Sciezka, "/Root[2]/el2[1]");
        }
Exemple #6
0
 /// <summary>
 /// Metoda zwracająca listę podobnych elementów
 /// </summary>
 /// <param name="element">obiekt WezelXML</param>
 public List<WezelXML> PodobneElementy(WezelXML element)
 {
     List<WezelXML> rezultat = elementy.FindAll(
         delegate(WezelXML wezel)
         {
             if (Diff.IgnorujNazwy == true)
             {
                 return wezel.Odnaleziony == false;
             }
             else
             {
                 return wezel.Odnaleziony == false && wezel.Element.Name.LocalName == element.Element.Name.LocalName;
             }
         }
     );
     return rezultat;
 }
Exemple #7
0
        public void Pozycja()
        {
            XElement xmlTree = new XElement("Root",
                new XElement("Child", 1),
                new XElement("Child", 2),
                new XElement("Child1", 5),
                new XElement("el",
                    new XAttribute("Att1", "Some text"),
                    new XAttribute("Att2", "Some text")
                )
            );

            XElement element = (XElement)xmlTree.LastNode;
            PositionInfo pos = PositionInfo.Pozycja(element.Attribute("Att2"));

            Assert.AreEqual(pos.LineNumber, 0);
            Assert.AreEqual(pos.LinePosition, 0);

            WezelXML wezel = new WezelXML(element);
            pos = PositionInfo.Pozycja(wezel);

            Assert.AreEqual(pos.LineNumber, 0);
            Assert.AreEqual(pos.LinePosition, 0);
        }
Exemple #8
0
        /// <summary>
        /// Metoda wyszukująca najpodobniejszy węzeł
        /// </summary>
        /// <param name="element">obiekt WezelXML</param>
        /// <param name="podobne">lista obiektów WezelXML</param>
        private WezelXML ZnajdzBlizniaczy(WezelXML element, List<WezelXML> podobne)
        {
            int naj_wynik, aktualny_wynik, naj_element, max_punktow;
            naj_wynik = aktualny_wynik = naj_element = max_punktow = 0;
            max_punktow = Compare.MaxPunktow(element);

            for (int i = 0; i < podobne.Count; i++)
            {
                aktualny_wynik = Compare.Porownanie(element.Element, podobne[i].Element);
                if (aktualny_wynik > naj_wynik)
                {
                    naj_wynik = aktualny_wynik;
                    naj_element = i;
                }
            }
            //Diff.Podobienstwo
            if ((naj_wynik * 100) / max_punktow > Diff.Podobienstwo)//podobny element musi zebrać conajmniej 70 % punktów do zdobycia
            {
                return podobne[naj_element];
            }
            return null;
        }
Exemple #9
0
 /// <summary>
 /// Metoda porównująca wartości tekstowe 2 węzłów
 /// </summary>
 /// <param name="lewy">źródłowy obiekt WezelXML</param>
 /// <param name="prawy">docelowy obiekt WezelXML</param>
 private void PorownajWartosc(WezelXML lewy, WezelXML prawy)
 {
     string l_element = Compare.WartoscElementu(lewy.Element);
     string p_element = Compare.WartoscElementu(prawy.Element);
     if (l_element != p_element)
     {
         string komunikat;
         if (l_element.ToLower() == p_element.ToLower())
         {
             komunikat = "Węzły " + lewy.Element.Name.LocalName + " posiadają identyczne wartości tesktowe, ale o różnej wielkości liter";
         }
         else
         {
             komunikat = "Węzły " + lewy.Element.Name.LocalName + " posiadają różne wartości tesktowe. Odleglość między wartościami wynosi " + Compare.levenshtein(l_element, p_element).ToString();
         }
         roznice.Add(new Roznica(TYP_ROZNICY.ROZNE_WARTOSCI_WEZLA, komunikat, true, PositionInfo.Pozycja(lewy), PositionInfo.Pozycja(prawy)));
     }
 }
Exemple #10
0
        /// <summary>
        /// Metoda porównująca przestrzenie nazw 2 węzłów
        /// </summary>
        /// <param name="lewy">źródłowy obiekt WezelXML</param>
        /// <param name="prawy">docelowy obiekt WezelXML</param>
        private void PorownajPrzestrzen(WezelXML lewy, WezelXML prawy)
        {
            XNamespace l_przestrzen = lewy.Element.Name.Namespace;
            XNamespace p_przestrzen = prawy.Element.Name.Namespace;

            if (l_przestrzen != p_przestrzen)
            {
                string komunikat = "Węzły " + lewy.Element.Name.LocalName + " należą do różnych przestrzeni nazw. Odleglość między przestrzeniami wynosi " + Compare.levenshtein(l_przestrzen.ToString(), p_przestrzen.ToString()).ToString();
                roznice.Add(new Roznica(TYP_ROZNICY.ROZNE_PRZESTRZENIE_NAZW, komunikat, true, PositionInfo.Pozycja(lewy), PositionInfo.Pozycja(prawy)));
            }
        }
Exemple #11
0
 /// <summary>
 /// Metoda porównująca atrybuty 2 węzłów
 /// </summary>
 /// <param name="lewy">źródłowy obiekt WezelXML</param>
 /// <param name="prawy">docelowy obiekt WezelXML</param>
 private void PorownajAtrybuty(WezelXML lewy, WezelXML prawy)
 {
     bool znaleziono = false;
     foreach (XAttribute l_atrybut in lewy.Element.Attributes())
     {
         znaleziono = false;
         foreach (XAttribute p_atrybut in prawy.Element.Attributes())
         {
             if (Compare.NazwaElementu(l_atrybut) == Compare.NazwaElementu(p_atrybut))
             {
                 znaleziono = true;
                 if (l_atrybut.Value != p_atrybut.Value)
                 {
                     string komunikat = "Węzły " + lewy.Element.Name.LocalName + " posiadają różne wartości atrybutu " + l_atrybut.Name.LocalName + ". Odleglość między atrybutami wynosi " + Compare.levenshtein(l_atrybut.Value, p_atrybut.Value).ToString();
                     roznice.Add(new Roznica(TYP_ROZNICY.ROZNE_WARTOSCI_ATRYBUTU, komunikat, true, PositionInfo.Pozycja(l_atrybut), PositionInfo.Pozycja(p_atrybut)));
                 }
                 p_atrybut.Remove();
                 break;
             }
         }
         if (!znaleziono)
         {
             string komunikat = "Nie znaleziono atrybutu ";
             if (Diff.SprawdzacPrzestrzen == true)
             {
                 komunikat += l_atrybut.Name.LocalName;
                 if (l_atrybut.Name.Namespace != "")
                 {
                     komunikat += " w przestrzeni nazw " + l_atrybut.Name.Namespace;
                 }
             }
             else
             {
                 komunikat += l_atrybut.Name.LocalName;
             }
             roznice.Add(new Roznica(TYP_ROZNICY.BRAKUJACY_ATRYBUT, komunikat, true, PositionInfo.Pozycja(l_atrybut), PositionInfo.Pozycja(prawy)));
         }
     }
     foreach (XAttribute pozostale_atr in prawy.Element.Attributes())
     {
         string komunikat = "Znaleziono zbędny atrybut " + pozostale_atr.Name.LocalName;
         if (Diff.SprawdzacPrzestrzen == true && pozostale_atr.Name.Namespace != "")
         {
             komunikat += " w przestrzeni nazw " + pozostale_atr.Name.Namespace;
         }
         roznice.Add(new Roznica(TYP_ROZNICY.ZBEDNY_ATRYBUT, komunikat, true, PositionInfo.Pozycja(lewy), PositionInfo.Pozycja(pozostale_atr)));
     }
 }