<?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();
}
<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();
}
<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();
https://bbs.csdn.net/topics/390893718
{
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(); }