Example #1
0
        public void MatchCanReceiveNullResolver()
        {
            XmlMatch  match  = new ElementMatch("foo");
            XmlReader reader = GetReader("<foo/>");

            match.Matches(reader, null);
        }
Example #2
0
 public override MatchData Match(Element element, string pathPart)
 {
     if (!Valid(element))
     {
         return(null);
     }
     return(ElementMatch <Container> .From(element, pathPart, refExpr));
 }
Example #3
0
		public void ShouldMatchElementForRootToo()
		{
			XmlReader reader = GetReader("<root/>");
			ElementMatch match = new ElementMatch("root", MatchMode.StartElement);

			reader.MoveToContent();

			Assert.IsTrue(match.Matches(reader, null));
		}
Example #4
0
        public void MatchThrowsIfPrefixButNoResolver()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<foo:bar xmlns:foo='xml-mvp'/>");

            reader.MoveToContent();

            match.Matches(reader, null);
        }
Example #5
0
        public void ThrowsIfWildcardNameWithPrefixAndNoResolver()
        {
            XmlMatch  match  = new ElementMatch("x", "*");
            XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");

            reader.MoveToContent();

            match.Matches(reader, null);
        }
Example #6
0
        public void ShouldMatchElementForRootToo()
        {
            XmlReader    reader = GetReader("<root/>");
            ElementMatch match  = new ElementMatch("root", MatchMode.StartElement);

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #7
0
        public void ShouldMatchStartElementCloseIfNoAttributes()
        {
            XmlReader    reader = GetReader("<root></root>");
            ElementMatch match  = new ElementMatch("root", MatchMode.StartElementClosed);

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #8
0
		public void ShouldMatchStartElementCloseIfNoAttributes()
		{
			XmlReader reader = GetReader("<root></root>");
			ElementMatch match = new ElementMatch("root", MatchMode.StartElementClosed);

			reader.MoveToContent();

			Assert.IsTrue(match.Matches(reader, null));
		}
Example #9
0
        public void ShouldMatchElement()
        {
            XmlReader    reader = GetReader("<root><foo></foo></root>");
            ElementMatch match  = new ElementMatch("foo", MatchMode.StartElement);

            reader.MoveToContent();
            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #10
0
		public void ShouldMatchElement()
		{
			XmlReader reader = GetReader("<root><foo></foo></root>");
			ElementMatch match = new ElementMatch("foo", MatchMode.StartElement);

			reader.MoveToContent();
			reader.Read();

			Assert.IsTrue(match.Matches(reader, null));
		}
Example #11
0
        public void ElementMatchOptionDoesNotMatchEndElement()
        {
            XmlMatch  match  = new ElementMatch("bar");
            XmlReader reader = GetReader("<bar></bar>");

            reader.MoveToContent();
            reader.Read();

            Assert.IsFalse(match.Matches(reader, null));
        }
Example #12
0
        public void EndElementMatchOptionMatchesEndElement()
        {
            XmlMatch  match  = new ElementMatch("bar", MatchMode.EndElement);
            XmlReader reader = GetReader("<bar></bar>");

            reader.MoveToContent();
            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #13
0
        public void ThrowsIfPrefixUnresolvable()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<bar/>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            match.Matches(reader, ns);
        }
Example #14
0
        public override MatchData Match(Element element, string pathPart)
        {
            var c = ElementMatch <Container> .From(element, pathPart, signatureExpr);

            if (c == null)
            {
                return(null);
            }
            var sig = c.match.Groups[1].Value;

            return(element.SupportsSignature(sig) ? c : null);
        }
Example #15
0
		public void ShouldMatchStartElementCloseOnLastAttribute()
		{
			XmlReader reader = GetReader("<root id='1' title='foo'></root>");
			ElementMatch match = new ElementMatch("root", MatchMode.StartElementClosed);

			reader.MoveToContent();

			Assert.IsFalse(match.Matches(reader, null));
			reader.MoveToFirstAttribute();
			Assert.IsFalse(match.Matches(reader, null));
			reader.MoveToNextAttribute();
			Assert.IsTrue(match.Matches(reader, null));
		}
Example #16
0
        public void BothWildcardMatchesAnyElementAndNamespace()
        {
            XmlMatch  match  = new ElementMatch("*", "*");
            XmlReader reader = GetReader("<foo><bar xmlns='xml-mvp'/></foo>");

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));

            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #17
0
        public void WildcardNameDoesNotMatchWrongElementNamespace()
        {
            XmlMatch  match  = new ElementMatch("*");
            XmlReader reader = GetReader("<foo xmlns='mvp-xml'><bar xmlns=''/></foo>");

            reader.MoveToContent();

            Assert.IsFalse(match.Matches(reader, null));

            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #18
0
        public void ThrowsIfWildcardNameCannotResolvePrefix()
        {
            XmlMatch  match  = new ElementMatch("x", "*");
            XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("y", "xml-mvp");

            match.Matches(reader, ns);
        }
Example #19
0
        public void MatchesNameWithPrefixDocumentWithoutPrefixButNamespace()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<bar xmlns='xml-mvp'/>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("foo", "xml-mvp");

            Assert.IsTrue(match.Matches(reader, ns));
        }
Example #20
0
        public void DoesNotMatchSameLocalNameButWrongNamespace2()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<bar/>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("foo", "xml-mvp");

            Assert.IsFalse(match.Matches(reader, ns));
        }
Example #21
0
        public void CanResolveToEmptyNamespace()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<bar/>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("foo", String.Empty);

            Assert.IsTrue(match.Matches(reader, ns));
        }
Example #22
0
        public void WildcardNameMatchesAnyElement()
        {
            XmlMatch  match  = new ElementMatch("*");
            XmlReader reader = GetReader("<foo><bar/></foo>");

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));

            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #23
0
        public void WildcardNamespaceMatchesElementsInAnyNamespace()
        {
            XmlMatch  match  = new ElementMatch("*", "foo");
            XmlReader reader = GetReader("<foo><foo xmlns='mvp-xml'/></foo>");

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));

            reader.Read();

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #24
0
        public void ShouldMatchStartElementCloseOnLastAttribute()
        {
            XmlReader    reader = GetReader("<root id='1' title='foo'></root>");
            ElementMatch match  = new ElementMatch("root", MatchMode.StartElementClosed);

            reader.MoveToContent();

            Assert.IsFalse(match.Matches(reader, null));
            reader.MoveToFirstAttribute();
            Assert.IsFalse(match.Matches(reader, null));
            reader.MoveToNextAttribute();
            Assert.IsTrue(match.Matches(reader, null));
        }
Example #25
0
        public void MatchesLocalNameWithoutPrefix()
        {
            XmlMatch  match  = new ElementMatch("foo");
            XmlReader reader = GetReader("<foo></foo>");

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));

            reader.Read();
            match = new ElementMatch("foo", MatchMode.EndElement);

            Assert.IsTrue(match.Matches(reader, null));
        }
Example #26
0
        public void WildcardNameMatchesAnyElementWithPrefix()
        {
            XmlMatch  match  = new ElementMatch("x", "*");
            XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("x", "xml-mvp");

            Assert.IsTrue(match.Matches(reader, ns));

            reader.Read();

            Assert.IsTrue(match.Matches(reader, ns));
        }
Example #27
0
        public void DoesNotMatchWrongLocalName()
        {
            XmlMatch  match  = new ElementMatch("foo");
            XmlReader reader = GetReader("<root><foo/></root>");

            reader.MoveToContent();

            Assert.IsFalse(match.Matches(reader, null));

            match = new ElementMatch("foo", MatchMode.EndElement);
            reader.Read();
            Assert.IsFalse(match.Matches(reader, null));
            reader.Read();
            Assert.IsTrue(match.Matches(reader, null));
            reader.Read();
            Assert.IsFalse(match.Matches(reader, null));
        }
Example #28
0
        public void MatchesNameWithPrefix()
        {
            XmlMatch  match  = new ElementMatch("foo", "bar");
            XmlReader reader = GetReader("<foo:bar xmlns:foo='xml-mvp'></foo:bar>");

            reader.MoveToContent();

            XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

            ns.AddNamespace("foo", "xml-mvp");

            Assert.IsTrue(match.Matches(reader, ns));

            reader.Read();

            match = new ElementMatch("foo", "bar", MatchMode.EndElement);
            Assert.IsTrue(match.Matches(reader, ns));
        }
Example #29
0
        public void ElementMatchOptionMatchesOnlyElement()
        {
            XmlMatch  match  = new ElementMatch("id");
            XmlReader reader = GetReader("<bar id='23'>hello</bar>");

            reader.MoveToContent();
            reader.MoveToFirstAttribute();

            Assert.IsFalse(match.Matches(reader, null));

            match = new ElementMatch("hello");
            reader.MoveToElement();
            reader.Read();

            Assert.AreEqual(XmlNodeType.Text, reader.NodeType);

            Assert.IsFalse(match.Matches(reader, null));
        }
        private List<ElementMatch<Element>> FindCorrespondingElements(IEnumerable<Element> elementsA, Element[] elementsB)
        {
            var elementMatches = new List<ElementMatch<Element>>();

            foreach (var element in elementsA)
            {
                Tuple<ElementMatch<Element>, decimal>[] matches;
                if (HasSimilarElements(element, elementsB, out matches))
                {
                    var elementMatch = new ElementMatch<Element>
                    {
                        This = element,
                        Matches = new Queue<Tuple<ElementMatch<Element>, decimal>>(matches)
                    };

                    elementMatch.SetToNext();
                    elementMatches.Add(elementMatch);
                }
            }

            return elementMatches;
        }
Example #31
0
		public void WildcardNameMatchesAnyEndElement()
		{
		    XmlMatch match = new ElementMatch("*", MatchMode.EndElement);
		    XmlReader reader = GetReader("<foo><bar></bar></foo>");
		    reader.MoveToContent();
		    reader.Read();

		    Assert.IsFalse(match.Matches(reader, null));

		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));

		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));
		}
Example #32
0
		public void WildcardNameDoesNotMatchWrongEndElementNamespace()
		{
		    XmlMatch match = new ElementMatch("*", MatchMode.EndElement);
		    XmlReader reader = GetReader("<foo xmlns='mvp-xml'><bar xmlns=''></bar></foo>");
		    reader.MoveToContent();
		    reader.Read();
			
		    Assert.IsFalse(match.Matches(reader, null));
			
		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));

		    reader.Read();

		    Assert.IsFalse(match.Matches(reader, null));
		}
Example #33
0
		public void ThrowsIfWildcardNameCannotResolvePrefix()
		{
			XmlMatch match = new ElementMatch("x", "*");
			XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("y", "xml-mvp");

			match.Matches(reader, ns);
		}
Example #34
0
		public void ElementMatchOptionMatchesOnlyElement()
		{
			XmlMatch match = new ElementMatch("id");
			XmlReader reader = GetReader("<bar id='23'>hello</bar>");
			reader.MoveToContent();
			reader.MoveToFirstAttribute();

			Assert.IsFalse(match.Matches(reader, null));

			match = new ElementMatch("hello");
			reader.MoveToElement();
			reader.Read();

			Assert.AreEqual(XmlNodeType.Text, reader.NodeType);

			Assert.IsFalse(match.Matches(reader, null));
		}
Example #35
0
		public void WildcardNamespaceMatchesEndElementsInAnyNamespace()
		{
		    XmlMatch match = new ElementMatch("*", "foo", MatchMode.EndElement);
		    XmlReader reader = GetReader("<foo><foo xmlns='mvp-xml'></foo></foo>");
		    reader.MoveToContent();
		    reader.Read();
		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));

		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));
		}
Example #36
0
		public void BothWildcardMatchesAnyEndElementAndNamespace()
		{
		    XmlMatch match = new ElementMatch("*", "*", MatchMode.EndElement);
		    XmlReader reader = GetReader("<foo><bar xmlns='xml-mvp'></bar></foo>");
		    reader.MoveToContent();
		    reader.Read();
		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));

		    reader.Read();

		    Assert.IsTrue(match.Matches(reader, null));
		}
Example #37
0
        public void ToStringEqualsFullName()
        {
            XmlMatch name = new ElementMatch("foo", "bar");

            Assert.AreEqual(name.FullName, name.ToString());
        }
Example #38
0
		public void ToStringEqualsFullName()
		{
			XmlMatch name = new ElementMatch("foo", "bar");

			Assert.AreEqual(name.FullName, name.ToString());
		}
Example #39
0
		public void ThrowsIfPrefixUnresolvable()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<bar/>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);

			match.Matches(reader, ns);
		}
Example #40
0
		public void CanGetPrefix()
		{
			XmlMatch match = new ElementMatch("foo", "*");

			Assert.AreEqual("foo", match.Prefix);
		}
Example #41
0
		public void IsAnyNamespaceIfPrefixIsWildcard()
		{
			XmlNameMatch name = new ElementMatch(XmlNameMatch.Wildcard, "foo");

			Assert.IsTrue(name.IsAnyNamespace);
		}
Example #42
0
		public void CanGetName()
		{
			XmlMatch match = new ElementMatch("foo");

			Assert.AreEqual("foo", match.Name);
		}
Example #43
0
		public void ThrowsIfWildcardNameWithPrefixAndNoResolver()
		{
			XmlMatch match = new ElementMatch("x", "*");
			XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");
			reader.MoveToContent();

			match.Matches(reader, null);
		}
Example #44
0
		public void WildcardNameMatchesAnyElementWithPrefix()
		{
			XmlMatch match = new ElementMatch("x", "*");
			XmlReader reader = GetReader("<x:foo xmlns:x='xml-mvp'><x:bar/></x:foo>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("x", "xml-mvp");

			Assert.IsTrue(match.Matches(reader, ns));

			reader.Read();

			Assert.IsTrue(match.Matches(reader, ns));
		}
Example #45
0
		public void EndElementMatchOptionMatchesEndElement()
		{
			XmlMatch match = new ElementMatch("bar", MatchMode.EndElement);
			XmlReader reader = GetReader("<bar></bar>");
			reader.MoveToContent();
			reader.Read();

			Assert.IsTrue(match.Matches(reader, null));
		}
Example #46
0
		public void FullNameContainsPrefixAndName()
		{
			XmlMatch name = new ElementMatch("foo", "bar");

			Assert.AreEqual("foo:bar", name.FullName);
		}
Example #47
0
        public void IsAnyNameIfNameIsWildcard()
        {
            XmlNameMatch name = new ElementMatch(XmlNameMatch.Wildcard);

            Assert.IsTrue(name.IsAnyName);
        }
Example #48
0
		public void MatchesNameWithPrefix()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<foo:bar xmlns:foo='xml-mvp'></foo:bar>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("foo", "xml-mvp");

			Assert.IsTrue(match.Matches(reader, ns));

			reader.Read();

			match = new ElementMatch("foo", "bar", MatchMode.EndElement);
			Assert.IsTrue(match.Matches(reader, ns));
		}
Example #49
0
		public void ElementMatchOptionDoesNotMatchEndElement()
		{
			XmlMatch match = new ElementMatch("bar");
			XmlReader reader = GetReader("<bar></bar>");
			reader.MoveToContent();
			reader.Read();

			Assert.IsFalse(match.Matches(reader, null));
		}
Example #50
0
		public void FullNameDoesNotContainColonForEmptyPrefix()
		{
			XmlMatch name = new ElementMatch(String.Empty, "foo");

			Assert.AreEqual("foo", name.FullName);
		}
Example #51
0
		public void MatchThrowsIfPrefixButNoResolver()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<foo:bar xmlns:foo='xml-mvp'/>");
			reader.MoveToContent();

			match.Matches(reader, null);
		}
Example #52
0
		public void MatchesNameWithPrefixDocumentWithoutPrefixButNamespace()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<bar xmlns='xml-mvp'/>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("foo", "xml-mvp");

			Assert.IsTrue(match.Matches(reader, ns));
		}
Example #53
0
        public void FullNameContainsPrefixAndName()
        {
            XmlMatch name = new ElementMatch("foo", "bar");

            Assert.AreEqual("foo:bar", name.FullName);
        }
Example #54
0
		public void IsAnyNameIfNameIsWildcard()
		{
			XmlNameMatch name = new ElementMatch(XmlNameMatch.Wildcard);

			Assert.IsTrue(name.IsAnyName);
		}
Example #55
0
		public void DoesNotMatchSameLocalNameButWrongNamespace2()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<bar/>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("foo", "xml-mvp");

			Assert.IsFalse(match.Matches(reader, ns));
		}
Example #56
0
		public void ThrowsIfUnknownMode()
		{
			ElementMatch match = new ElementMatch("root", (MatchMode)10);
		}
Example #57
0
        public void FullNameDoesNotContainColonForEmptyPrefix()
        {
            XmlMatch name = new ElementMatch(String.Empty, "foo");

            Assert.AreEqual("foo", name.FullName);
        }
Example #58
0
        /// <summary>
        /// Attempts to determine which element on page A corresponds to which element on page B.
        /// </summary>
        /// <returns>A collection of mappings.</returns>
        private void CorrespondingElements(Scrape pageA, Scrape pageB, decimal maxDistance)
        {
            var elementMatches = new List<ElementMatch<ScrapedElement>>();

            foreach (var element in pageA.Elements)
            {
                ScrapedElement match;
                Tuple<ElementMatch<ScrapedElement>, decimal>[] matches;

                if (_elementMapper.HasExactMatch(element, pageB.Elements, out match) || _elementMapper.HasIdMatch(element, pageB.Elements, out match))
                {
                    element.CorrespondingScrapedElement = match;
                    match.CorrespondingScrapedElement = element;
                }
                else if (_elementMapper.HasSimilarElements(element, pageB.Elements, maxDistance, out matches))
                {
                    var elementMatch = new ElementMatch<ScrapedElement>
                    {
                        This = element,
                        Matches = new Queue<Tuple<ElementMatch<ScrapedElement>, decimal>>(matches)
                    };

                    elementMatch.SetToNext();
                    elementMatches.Add(elementMatch);
                }
            }

            // Resolve conflicts
            _conflictResolver.ResolveAllConflicts(elementMatches.ToArray());

            foreach (var element in elementMatches.Where(m => m.Match != null))
            {
                element.This.CorrespondingScrapedElement = element.Match.This;
                element.Match.This.CorrespondingScrapedElement = element.This;
            }
        }
Example #59
0
 public override MatchData Match(Element element, string pathPart)
 {
     return(ElementMatch <Container> .From(element, pathPart, expr));
 }
Example #60
0
		public void CanResolveToEmptyNamespace()
		{
			XmlMatch match = new ElementMatch("foo", "bar");
			XmlReader reader = GetReader("<bar/>");
			reader.MoveToContent();

			XmlNamespaceManager ns = new XmlNamespaceManager(reader.NameTable);
			ns.AddNamespace("foo", String.Empty);

			Assert.IsTrue(match.Matches(reader, ns));
		}