<?xml version="1.0" encoding="utf-8" ?>
<note>
  <Student>
    <Name>li</Name>
    <ID>123</ID>
    <WorkName>assignment1</WorkName>
    <Grade>80</Grade>
  </Student>
  <Student>
    <Name>han</Name>
    <ID>158</ID>
    <WorkName>assignment2</WorkName>
    <Grade>80</Grade>
    <question>
  <index>1</index>
  <score>100</score>
    </question> 
  </Student>
</note>
就例如我的xml是这样的,我现在能查询Student下的Name, ID, WorkName, Grade.
但是我想查询question的index=1情况下,在Datagridview里显示出score的值要怎么样写呢
 public void Query(String GradeResult, String NameResult, String IDResult, String WorkNameResult)
        {
            XElement xelement = XElement.Load("E:/WindowsFormsApplication1Update2/WindowsFormsApplication1/WindowsFormsApplication1/1.xml");            
            var query = from t in xelement.Descendants("Student")                    //located in "Student" root
                       .Where(w => w.Element("Grade").Value.Contains(GradeResult))   //use "where" which contain the keyword to select the result
                       .Where(w => w.Element("Name").Value.Contains(NameResult))
                       .Where(w => w.Element("ID").Value.Contains(IDResult))
                       .Where(w => w.Element("WorkName").Value.Contains(WorkNameResult))
                        
                        select new
                        {
                            Name = t.Element("Name").Value,
                            ID = t.Element("ID").Value,
                            WorkName = t.Element("WorkName").Value,
                            Grade = t.Element("Grade").Value,
                            Index = t.Element("question").Element("index").Value,                           
                           
                        };                        dataGridView1.DataSource = query.ToList();
        }

解决方案 »

  1.   

    或许这就是你要的答案吧,有两种方式都可行var xml = XDocument.Parse(@"<note>
      <Student>
        <Name>li</Name>
        <ID>123</ID>
        <WorkName>assignment1</WorkName>
        <Grade>80</Grade>
      </Student>
      <Student>
        <Name>han</Name>
        <ID>158</ID>
        <WorkName>assignment2</WorkName>
        <Grade>80</Grade>
        <question>
              <index>1</index>
              <score>100</score>
        </question> 
      </Student>
      <Student>
        <Name>yan</Name>
        <ID>156</ID>
        <WorkName>assignment5</WorkName>
        <Grade>88</Grade>
        <question>
              <index>2</index>
              <score>101</score>
        </question> 
      </Student>
    </note>");var note = xml.Root;
    var students = note.Elements();//因为有些节点没有question子节点,所以需要判断父节点是否为null
    var query = students
        .Where(x => x.Element("question") != null && x.Element("question").Element("index").Value == "1")
        .Select(t => new
        {
            Name = t.Element("Name").Value,
            ID = t.Element("ID").Value,
            WorkName = t.Element("WorkName").Value,
            Grade = t.Element("Grade").Value,
            Index = t.Element("question").Element("index").Value,
        }).ToList();;var query2 = (from t in note.Elements()
                 .Where(x => x.Element("question") != null && x.Element("question").Element("index").Value == "1")
                  select new
                  {
                      Name = t.Element("Name").Value,
                      ID = t.Element("ID").Value,
                      WorkName = t.Element("WorkName").Value,
                      Grade = t.Element("Grade").Value,
                      Index = t.Element("question").Element("index").Value,
                  }).ToList();
      

  2.   

    这个问题我只能让百度告诉你
    https://bbs.csdn.net/topics/390893718
      

  3.   

    static void Main(string[] args)
            {
                string data = @"<?xml version='1.0' encoding='utf-8' ?>
                    <note>
      <Student>
        <Name>li</Name>
        <ID>123</ID>
        <WorkName>assignment1</WorkName>
        <Grade>80</Grade>
      </Student>
      <Student>
        <Name>han</Name>
        <ID>158</ID>
        <WorkName>assignment2</WorkName>
        <Grade>80</Grade>
        <question>
              <index>1</index>
              <score>100</score>
        </question> 
      </Student>
    </note>";
                XElement xelement = XElement.Parse(data);
                var q = (from t in xelement.Descendants("Student")
                        let question = t.Element("question")
                        select new
                            {
                                Name = t.Element("Name").Value,
                                ID = t.Element("ID").Value,
                                WorkName = t.Element("WorkName").Value,
                                Grade = t.Element("Grade").Value,
                                Index = question==null?"":(question.Element("index").Value),
                                Score = question==null?"":(question.Element("index").Value=="1"?question.Element("score").Value:"0")
                            }).ToList();            Console.ReadLine();        }