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); }
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); }
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); }
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); }