加载XML文件的内容
问题描述:
所以我有一个看起来像这样的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;
}
答
考虑使用类似下面的方法提取的成分:
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”节点。