Exemplo n.º 1
0
        private FieldExtractor GetAttributeExtractCombo(Type type, FieldInfo field)
        {
            FieldExtractor fieldExtractor = null;
            var            comboExtract   = AttributeUtil.GetAttribute <ComboExtractAttribute>(field);

            if (comboExtract != null)
            {
                var       extractBys = comboExtract.Value;
                var       selectors  = ExtractorUtils.GetSelectors(extractBys);
                ISelector selector   = new AndSelector(selectors);
                switch (comboExtract.Op)
                {
                case Op.And:
                    selector = new AndSelector(selectors);
                    break;

                case Op.Or:
                    selector = new OrSelector(selectors);
                    break;
                }
                var source = comboExtract.Source == ExtractSource.RawHtml ? Source.RawHtml : Source.Html;
                fieldExtractor = new FieldExtractor(field, selector, source,
                                                    comboExtract.NotNull, comboExtract.IsMulti ||
                                                    typeof(List <object>).IsAssignableFrom(field.GetType()))
                {
                    SetterMethod = GetSetterMethod(type, field) ?? null
                };
            }
            return(fieldExtractor);
        }
Exemplo n.º 2
0
 private void SetField(object obj, FieldExtractor fieldExtractor, object value)
 {
     if (value == null)
     {
         return;
     }
     if (fieldExtractor.SetterMethod != null)
     {
         fieldExtractor.SetterMethod.Invoke(obj, parameters: new object[] { value });
     }
     fieldExtractor.Field.SetValue(obj, value);
 }
Exemplo n.º 3
0
        private FieldExtractor GetAttributeExtractByUrl(Type type, FieldInfo field)
        {
            FieldExtractor fieldExtractor   = null;
            var            extractByUrlAttr = AttributeUtil.GetAttribute <ExtractByUrlAttribute>(field);

            if (extractByUrlAttr != null)
            {
                var regexPattern = extractByUrlAttr.Value;
                if (regexPattern.Trim().Equals(""))
                {
                    regexPattern = ".*";
                }
                fieldExtractor = new FieldExtractor(field,
                                                    new RegexSelector(regexPattern), Source.Url,
                                                    extractByUrlAttr.NotNull, extractByUrlAttr.IsMulti ||
                                                    typeof(List <object>).IsAssignableFrom(field.GetType()))
                {
                    SetterMethod = GetSetterMethod(type, field)
                };
            }
            return(fieldExtractor);
        }
Exemplo n.º 4
0
        private FieldExtractor GetAttributeExtractBy(Type type, FieldInfo field)
        {
            FieldExtractor fieldExtractor = null;
            var            extractBy      = AttributeUtil.GetAttribute <ExtractByAttribute>(field);

            if (extractBy != null)
            {
                var selector  = ExtractorUtils.GetSelector(extractBy);
                var sourceTmp = extractBy.Source;
                if (extractBy.Type == ExtractType.JsonPath)
                {
                    sourceTmp = ExtractSource.RawText;
                }
                Source source = Source.Html;
                switch (sourceTmp)
                {
                case ExtractSource.RawText:
                    source = Source.RawText;
                    break;

                case ExtractSource.RawHtml:
                    source = Source.RawHtml;
                    break;

                case ExtractSource.SelectedHtml:
                    source = Source.Html;
                    break;
                }
                fieldExtractor = new FieldExtractor(field, selector, source,
                                                    extractBy.NotNull, true)
                {
                    SetterMethod = null
                };
            }
            return(fieldExtractor);
        }