2013-10-16 31 views
1

所以我有一個看起來像這樣的XML文件。加載XML文件的內容

<recept id="1" sort="vardag"> 
    <!-- namn och portioner förekommer endast en gång i varje respektive element--> 
    <namn>Pannkaka</namn> 
    <portioner>4 portioner</portioner> 
    <!--elementet ingrediens inehåller PCDATA och ett underelement dvs mangd 
    och kan förekomma minst 1 eller flera gånger--> 

     <ingrediens> 
     Ägg<mangd> 3 st</mangd> 
     </ingrediens> 
     <ingrediens> 
     Mjölk<mangd> 10 dl</mangd> 
     </ingrediens> 
     <ingrediens> 
     Mjöl<mangd> 3 dl</mangd> 
     </ingrediens> 
     <ingrediens> 
     Salt<mangd> En nypa</mangd> 
     </ingrediens> 
     <ingrediens> 
     Matfett<mangd> 2 msk matolja eller smör</mangd> 
     </ingrediens> 

    <!--elementet tillredning kan endast förekomma en gång i elementet recept och 
    innehåller PCDATA--> 
    <tillredning> 
     <steg>Ta fram en lagom stor bunke</steg> 
     <steg>Smält smöret i en kastrull</steg> 
     <steg>Vispa ihop ägg, mjölk, mjöl och saltet</steg> 
     <steg>Låt smöret svalna en smula och blanda sen det i smeten</steg> 
     <steg>Stek gyllenbruna i stekpanna på medelvärme</steg> 
    </tillredning> 
    </recept> 

現在,當我在ID上搜索我想要加載之間的一切。 我目前剛剛通過+添加了它們,但是如果一個子類別多於一個,它只會加載其中的一個。

private void buttonSök_Click(object sender, EventArgs e) 
    { 
     var v = (from x in el.Descendants("recept") 
       where x.Attribute("id").Value.ToLower() == textBoxID.Text.ToLower() 
       select x).FirstOrDefault(); 

     if (v == null) 
     { 
      MessageBox.Show("Finns inte!"); 
     } 
     richTextBox1.Text = v.Element("namn").Value + "\r\n" + v.Element("portioner").Value + "\r\n" + v.Element("ingredienser").Value +"\r\n" + v.Element("tillredning").Value; 

    } 

回答

0

考慮使用類似下面的方法提取的成分:

private static string ExtractIngredients(XElement v) 
{ 
    var ingredients = v 
     .Elements("ingrediens") 
     .Select(e => 
      e.DescendantNodes().OfType<XText>().First().Value + 
      ": " + 
      e.Element("mangd").Value); 

    return String.Join("\r\n", ingredients); 
} 

在這裏,您使用的事實,成分名稱是XML文本節點,並指其爲獨立的兒童「ingrediens」節點。