2013-06-04 19 views
10

Belirli bir XML dosyasını ayrıştırmak için kısa C# yazıyorum. Ancak, etiket değerlerinden 1 tanesi değişebilir, ancak her zaman, nerede, "Hızlı Başlatma" kelimelerini (vaka ve boşlukları dikkate almayan, ancak aynı sırada olması gereken) sözcükleri içerir. Bunu C# 'de sql benzeri bir deyimde nasıl yapacağımı bilmiyorum. Eğer sadece bir String.Contains kullanabilirsiniz -Linq ifadesinde Regex?

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where cli.Element(xmlns + "ResultsLocation").Value == "Assessments-Fast-Startup" 
         select cli; 
+0

sql nerede? - Tüm gördüğüm linq to xml –

+0

Bu ne demek istediğim – jerryh91

+0

tam dizeyi mi arıyorsunuz, ya da benzer bir şey: hızlı * başlangıç ​​ –

cevap

13

Eğer tam dize aradığınız varsayarsak? Aksi

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where cli.Element(xmlns + "ResultsLocation").Value.Contains("Assessments-Fast-Startup") 
    select cli; 

, gibi bir şey:

var rx = new Regex("fast(.*?)startup", RegexOptions.IgnoreCase); 

var selected = from cli in doc.Descendants(xmlns+ "Result") 
    where rx.IsMatch(cli.Element(xmlns + "ResultsLocation").Value) 
    select cli; 
+0

(. *?) yoksayma durumu nedir? – jerryh91

+1

Hayır, sadece "hızlı {şey} başlangıç" diyoruz. Regex tanımındaki durumu göz ardı edebilirsiniz –

2

fast[- ]?start[- ]?up bir düzenli ifade çalışmalıdır isteğe bağlı çizgi veya boşluk kelime parçalarını

ayıran olabilir

... 
where Regex.IsMatch(
    cli.Element(xmlns + "ResultsLocation").Value, 
    "fast[- ]?start[- ]?up", 
    RegexOptions.IgnoreCase 
) 
select cli 

Eğer @DaveBish bunun yerine regex ait .Contains(...) testinde hatta .ToLower().Contains(...) zincirleme (ayrıca bir null kontrol gerekebilir ince olabilir bahsettiniz regex http://regexpal.com/

gibi regex tester denemek oynamak için gereken bulursanız ayrıca)