Esempio n. 1
0
 /// <summary>
 /// Поиск по подготовленному регекс-запросу с парамтерами
 /// </summary>
 /// <param name="root"></param>
 /// <param name="query"></param>
 /// <returns></returns>
 public IEnumerable <XElement> Select(XElement root, RegexSelectorQuery query)
 {
     if (IsMatch(root, query))
     {
         yield return(root);
     }
     foreach (var child in root.Elements())
     {
         foreach (var childresult in Select(child, query))
         {
             yield return(childresult);
         }
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Проверяет соответствие элемента регекс - запросу
 /// </summary>
 /// <param name="root"></param>
 /// <param name="query"></param>
 /// <returns></returns>
 public bool IsMatch(XElement root, RegexSelectorQuery query)
 {
     if (null != query.TagFilter && 0 != query.TagFilter.Length)
     {
         if (query.UseTagFilterAsExclude)
         {
             if (-1 != Array.IndexOf(query.TagFilter, root.Name.LocalName))
             {
                 return(false);
             }
         }
         else
         {
             if (-1 == Array.IndexOf(query.TagFilter, root.Name.LocalName))
             {
                 return(false);
             }
         }
     }
     if (query.FindInFullString)
     {
         if (query.Regex.IsMatch(root.ToString()))
         {
             return(true);
         }
     }
     if (query.FindInAttributes)
     {
         if (root.Attributes().Any(a => query.Regex.IsMatch(a.Value)))
         {
             return(true);
         }
     }
     if (query.FindInTextValues)
     {
         if (root.Nodes().OfType <XText>().Any(t => query.Regex.IsMatch(t.Value)))
         {
             return(true);
         }
     }
     return(false);
 }