Пример #1
0
 //DI przez metode
 public void AddElementToMyHtml(IHtmlItem element, string content)
 {
     if (element != null)
     {
         element.AddToSite(content);
     }
 }
Пример #2
0
        private static string GetValue(IHtmlItem htmlItem, IElement element)
        {
            var value = (string.IsNullOrEmpty(htmlItem.Attr)
                ? element.Text()
                : element.GetAttribute(htmlItem.Attr)).Trim();

            if (!string.IsNullOrEmpty(htmlItem.RegexPattern))
            {
                value = Regex.Match(value, htmlItem.RegexPattern).Groups[htmlItem.RegexGroup].Value;
            }
            return(value);
        }
Пример #3
0
        /// <summary>
        /// Convert JToken object to corresponding IHtmlItem object (of specific type) and all descendants
        /// </summary>
        ///<param name="jToken">JToken object to convert</param>
        /// <returns>IHtmlItem instance</returns>
        /// <remarks>Processes all descentandts recursively</remarks>
        private static IHtmlItem ConvertFromJson(JToken jToken)
        {
            logger.Debug($"ConvertFromJson invoked with {jToken}]");

            var m = _rxKeyFromPath.Match(jToken.Path); //find path (tag/attribute key)

            logger.Debug($"ConvertFromJson found {m} for {_rxKeyFromPath}");

            var htmlItem = _htmlItemFactory.Resolve(m.Success ? m.Value : "document"); //root object (has no path, so we inject key)

            logger.Debug($"ConvertFromJson resolved {htmlItem} for {(m.Success ? m.Value : "document")}");

            if (htmlItem == null)
            {
                logger.Warn($"ConvertFromJson could not resolve {m.Value}");
                return(null);
            }

            switch (jToken.Type)
            {
            case JTokenType.Integer: //some attributes are integer (i.e. initial-scale)

            case JTokenType.String:
                htmlItem.SetValue(jToken.Value <string>());
                break;

            case JTokenType.Object:
                foreach (var value in jToken.Values())
                {
                    IHtmlItem childItem = ConvertFromJson(value);

                    if (childItem is HtmlTag)
                    {
                        ((HtmlTag)htmlItem).Children.Add((HtmlTag)childItem);
                    }
                    else if (childItem is HtmlAttribute)
                    {
                        ((HtmlTag)htmlItem).Attributes.Add(((HtmlAttribute)childItem));
                    }
                }
                break;
            }

            logger.Trace($"ConvertFromJson finished with {htmlItem}");

            return(htmlItem);
        }
Пример #4
0
        private static (IHtmlCollection <IElement> Elements, IHtmlItem HtmlItem) GetFirstOfDefaultNodes(
            IParentNode element, IEnumerable <IHtmlItem> attributes)
        {
            IHtmlCollection <IElement> node = null;
            IHtmlItem htmlItem = null;

            foreach (var attribute in attributes)
            {
                node = element.QuerySelectorAll(attribute.Path);
                if (node == null || !node.Any())
                {
                    continue;
                }
                htmlItem = attribute;
                break;
            }
            return(node, htmlItem);
        }
Пример #5
0
        private static (IElement Element, IHtmlItem HtmlItem) GetFirstOfDefaultNode(IParentNode element,
                                                                                    IEnumerable <IHtmlItem> attributes)
        {
            IElement  node     = null;
            IHtmlItem htmlItem = null;

            foreach (var attribute in attributes)
            {
                node = element.QuerySelector(attribute.Path);
                if (node == null)
                {
                    continue;
                }
                htmlItem = attribute;
                break;
            }
            return(node, htmlItem);
        }
Пример #6
0
        private static object GetTargetValue(IHtmlItem htmlItem, IElement element, Type targetType)
        {
            object targetValue = null;

            switch (Type.GetTypeCode(targetType))
            {
            case TypeCode.Boolean:
            case TypeCode.Byte:
            case TypeCode.Char:
            case TypeCode.DateTime:
            case TypeCode.Decimal:
            case TypeCode.Double:
            case TypeCode.Int16:
            case TypeCode.Int32:
            case TypeCode.Int64:
            case TypeCode.SByte:
            case TypeCode.Single:
            case TypeCode.String:
            case TypeCode.UInt16:
            case TypeCode.UInt32:
            case TypeCode.UInt64:
                try
                {
                    targetValue = Convert.ChangeType(GetValue(htmlItem, element), targetType);
                }
                catch
                {
                    // ignored
                }

                break;

            case TypeCode.DBNull:
            case TypeCode.Empty:
                throw new NotSupportedException();

            default:
                targetValue = DeserializeObject(element, targetType);
                break;
            }

            return(targetValue);
        }
Пример #7
0
        private static (IElement Element, IHtmlItem HtmlItem) GetFirstOfDefaultNode(IParentNode element,
                                                                                    IEnumerable <IHtmlItem> attributes)
        {
            IElement  node     = null;
            IHtmlItem htmlItem = null;

            foreach (var attribute in attributes)
            {
                node = element.QuerySelector(attribute.Selector);
                if (node == null || !string.IsNullOrEmpty(attribute.Attr) && !node.HasAttribute(attribute.Attr))
                {
                    continue;
                }

                htmlItem = attribute;
                break;
            }

            return(node, htmlItem);
        }
Пример #8
0
        public void TestInvalidTag(string jsonInput, IHtmlItem htmlItem)
        {
            var item = JsonHtmlConverter.ConvertFromJson(jsonInput);

            Assert.Null(htmlItem);
        }
Пример #9
0
 private static bool isText(IHtmlItem s)
 {
     if (s is HtmlText)
         return true;
     else
         return false;
 }
Пример #10
0
 //DI przez konstruktor
 public MyHtmlSite(IHtmlItem item)
 {
     this.item = item;
 }