1

所以我有一个看起来像这样的 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;

    }
4

1 回答 1

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”节点的独立子节点。

于 2013-10-16T09:24:02.280 回答