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

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

			reader.MoveToContent();

			Assert.IsTrue(match.Matches(reader, null));
		}
示例#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);
        }
示例#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);
        }
示例#6
0
        public void ShouldMatchElementForRootToo()
        {
            XmlReader    reader = GetReader("<root/>");
            ElementMatch match  = new ElementMatch("root", MatchMode.StartElement);

            reader.MoveToContent();

            Assert.IsTrue(match.Matches(reader, null));
        }
示例#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));
        }
示例#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));
		}
示例#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));
        }
示例#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));
		}
示例#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));
        }
示例#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));
        }
示例#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);
        }
示例#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);
        }
示例#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));
		}
示例#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));
        }
示例#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));
        }
示例#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);
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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));
        }
示例#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;
        }
示例#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));
		}
示例#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));
		}
示例#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);
		}
示例#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));
		}
示例#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));
		}
示例#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));
		}
示例#37
0
        public void ToStringEqualsFullName()
        {
            XmlMatch name = new ElementMatch("foo", "bar");

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

			Assert.AreEqual(name.FullName, name.ToString());
		}
示例#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);
		}
示例#40
0
		public void CanGetPrefix()
		{
			XmlMatch match = new ElementMatch("foo", "*");

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

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

			Assert.AreEqual("foo", match.Name);
		}
示例#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);
		}
示例#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));
		}
示例#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));
		}
示例#46
0
		public void FullNameContainsPrefixAndName()
		{
			XmlMatch name = new ElementMatch("foo", "bar");

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

            Assert.IsTrue(name.IsAnyName);
        }
示例#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));
		}
示例#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));
		}
示例#50
0
		public void FullNameDoesNotContainColonForEmptyPrefix()
		{
			XmlMatch name = new ElementMatch(String.Empty, "foo");

			Assert.AreEqual("foo", name.FullName);
		}
示例#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);
		}
示例#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));
		}
示例#53
0
        public void FullNameContainsPrefixAndName()
        {
            XmlMatch name = new ElementMatch("foo", "bar");

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

			Assert.IsTrue(name.IsAnyName);
		}
示例#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));
		}
示例#56
0
		public void ThrowsIfUnknownMode()
		{
			ElementMatch match = new ElementMatch("root", (MatchMode)10);
		}
示例#57
0
        public void FullNameDoesNotContainColonForEmptyPrefix()
        {
            XmlMatch name = new ElementMatch(String.Empty, "foo");

            Assert.AreEqual("foo", name.FullName);
        }
示例#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;
            }
        }
示例#59
0
 public override MatchData Match(Element element, string pathPart)
 {
     return(ElementMatch <Container> .From(element, pathPart, expr));
 }
示例#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));
		}