예제 #1
0
        private static string CreateIdentity(IHtmlElement element, bool ancestorsCreate)
        {
            string parentId;

            var parentElement = element.Parent();

            if (parentElement != null)
            {
                parentId = Identity(parentElement);
                if (parentId == null)
                {
                    if (ancestorsCreate)
                    {
                        parentId = Identity(parentElement, true, true);
                    }
                    else
                    {
                        parentId = CreateIdentity(parentElement, false);
                    }
                }
            }
            else
            {
                if (element.Container is IHtmlDocument)
                {
                    parentId = null;
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }

            var name = GetElementName(element);

            var builder = new StringBuilder();

            if (!string.IsNullOrEmpty(parentId))
            {
                builder.AppendFormat("{0}_", parentId);
            }

            builder.Append(name);

            if (element.Siblings().Where(e => GetElementName(e).EqualsIgnoreCase(GetElementName(element))).IsSingle())
            {
                return(builder.ToString());
            }



            var index = element.SiblingsBeforeSelf().Count(e => GetElementName(e).EqualsIgnoreCase(GetElementName(element)));

            builder.Append(index + 1);

            var identity = builder.ToString();

            return(EnsureUniqueness(identity, element.Document));
        }
예제 #2
0
        private static string CreateIdentity( IHtmlElement element, bool ancestorsCreate )
        {
            string parentId;

              var parentElement = element.Parent();
              if ( parentElement != null )
              {
            parentId = Identity( parentElement );
            if ( parentId == null )
            {
              if ( ancestorsCreate )
            parentId = Identity( parentElement, true, true );
              else
            parentId = CreateIdentity( parentElement, false );
            }
              }
              else
              {
            if ( element.Container is IHtmlDocument )
              parentId = null;
            else
              throw new InvalidOperationException();
              }

              var name = GetElementName( element );

              var builder = new StringBuilder();

              if ( !string.IsNullOrEmpty( parentId ) )
            builder.AppendFormat( "{0}_", parentId );

              builder.Append( name );

              string identity;

              if ( element.Siblings().Where( e => GetElementName( e ).EqualsIgnoreCase( GetElementName( element ) ) ).IsSingle() )
            identity = builder.ToString();

              var index = element.SiblingsBeforeSelf().Count( e => GetElementName( e ).EqualsIgnoreCase( GetElementName( element ) ) );
              builder.Append( index + 1 );

              identity = builder.ToString();
              return EnsureUniqueness( identity, element.Document );
        }