2009-02-27 22 views
3

LINQ öğrenmeye çalışıyorum ve VB kullanarak XML sorgulama konusunda bir sorum var.VB LINQ kullanarak özniteliklerde XML sorgulaması

Benim XML:

<Procedure-Text> 
    <A ID="marker1"></A>Do This Procedure 
</Procedure-Text> 
<Procedure-Text> 
    <A ID="marker2"></A>Do That Procedure 
</Procedure-Text> 

nasıl Kimliği özelliğini marker2 sahip tek prosedür metni almak için benim sorgu belirtebilirsiniz? Diğer bir deyişle, Do That Procedure diyor bir sonuç dize istiyorum.

Teşekkür

cevap

6

Kullanım VB XML değişmezleri:

Dim marker2 = From x In data...<Procedure-Text> _ 
       Where x.<A>[email protected] = "marker2" _ 
       Select x 

üçlü nokta sözdizimi üretmek bir xml elemanının "torunları", yani data...<Procedure-Test>data

XML nokta sözdizimi içindeki <Procedure-Test> etiket listesi üretecek literals, "first descendant" anlamına gelir; dolayısıyla x.<A>, x'in içinde <A>'un ilk oluşumunu üretecektir. hangi x şimdi <Procedure-Test>

örneği olduğunu Ve şimdi istenen <A> eleman olduğuna göre bir dizeye onun kimliğini karşılaştırarak @attr nitelik seçici ile önemsiz olduğunu. <A> etiketinin kimlik özelliği "marker2" eşitse <A>[email protected] = "marker2" yüzden,

Yani x.<A>[email protected]

"ID x içindeki ilk <A> etiketinin niteliği" Ve <Procedure-Text> eleman istediğiniz anlamına True değerlendirecek

Sub Main() 

    Dim data = <doc> 
        <Procedure-Text> 
         <A ID="marker1"></A>Do This Procedure 
        </Procedure-Text> 
        <Procedure-Text> 
         <A ID="marker2"></A>Do That Procedure 
        </Procedure-Text> 
       </doc> 

    Dim marker2 = From x In data...<Procedure-Text> _ 
        Where x.<A>[email protected] = "marker2" _ 
        Select x 

    ' prints the second procedure-text element 
    Console.WriteLine(marker2.FirstOrDefault().ToString()) 

    Console.ReadKey() 

End Sub 
+0

Çalışır: Eğer Select x

Tam örnek belirtmek! Teşekkürler! FirstOrDefault yerine, ihtiyacım olan dizeyi almak için Değer kullanıyorum. – mraviator

+1

VB, C# (dilimdeki seçimim) eksik olan xml için çok fazla desteğe sahip. VB ile ilgili tek şey dileğim C# idi. Ayrıca bu desteğin XElements üzerinde kanal yazımına dayandığını bilmiyordum. Oldukça dikkat çekici derleyici büyüsü. – Will

1

linq sorgusu o kimlik özelliği "marker2" dir var ve acil bir sonraki düğümü almak A isimli bir eleman aramaya, başka deyişle

from x 
in d.Descendants("A") 
where x.Attribute("ID").Value == "marker2" 
select x.NextNode 

olduğunu.

Muhtemelen bir metin içinde bulunan XNode'u (aslında bir XText'i) çıkarmak için sonuçlanan numaralandırmada bir FirstOrDefault() yapmak isteyeceksiniz.