如何检查特定元素中是不是有值或其他类?
Posted
技术标签:
【中文标题】如何检查特定元素中是不是有值或其他类?【英文标题】:How to Check a Particular Element has a Value or another class inside it?如何检查特定元素中是否有值或其他类? 【发布时间】:2020-02-11 07:21:22 【问题描述】:如何检查一个特定的元素是否有值或内部元素? 在这里我有一个学生列表,通过使用名称作为搜索键将他们的结果显示到 Richtextbox 但在这里我遇到了像学生一样的 smith 问题,我在其中还有一个表格作为标记列表,如何检查并显示 该特定元素是否具有价值或元素? 我正在使用 C# 和 LINQ 来检索数据。
<StudentDataset>
<Student>
<Name>Raj</Name>
<TotalMarks>330</TotalMarks>
<Year>2009+5</Year>
</Student>
<Student>
<Name>Dennis</Name>
<TotalMarks>514</TotalMarks>
<Year>2009</Year>
</Student>
<Student>
<Name>Lisa</Name>
<TotalMarks>510</TotalMarks>
<Year>2011</Year>
</Student>
<Student>
<Name>Rahul</Name>
<TotalMarks>490</TotalMarks>
<Year>2019</Year>
</Student>
<Student>
<Name>Smith</Name>
<TotalMarks>
<IndividualScores>
<Table Mode="SSC">
<Item Marks="40" Result="10.6" />
<Item Marks="100" Result="6.4" />
<Item Marks="110" Result="5.7" />
<Item Marks="120" Result="5" />
<Item Marks="130" Result="4.3" />
<Item Marks="140" Result="3.5" />
<Item Marks="150" Result="2.8" />
</Table>
<Table Mode="Inter">
<Item Marks="40" Result="8.8" />
<Item Marks="50" Result="8.8" />
<Item Marks="60" Result="8.8" />
<Item Marks="70" Result="8.8" />
<Item Marks="80" Result="8.8" />
</Table>
</IndividualScores>
</TotalMarks>
<Year>2013</Year>
</Student>
<Student >
<Name>Jessy </Name>
<TotalMarks><SchoolName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> /.>
<English>88</English>
<Mathematics>90</mathematics>
<Science>98</science>
</SchoolName>
</TotalMarks>
<Year>2014</Year>
</Student>
</StudentDataset>
C#
XDocument doc = XDocument.Load(@"filename");
IEnumerable<XElement> AllStudntElements = doc.Root.Elements();
var SelectDataByName = from element in AllStudntElements
where element.Element("Name").Value == SearchtItem
select element;
为每个循环使用它对每个学生都非常有效,但就像 smith 一样,如何检查总分是否具有内部元素以及如何将分数和结果显示为像 smith 这样的学生的列表? 我已经尝试了 has children,hasAttribute 之类的所有方法,但没有给出正确的结果?
对于 Jesse,我有 XML 模式,对于 Smith,我有一个表 如何知道一个元素是否有值或元素或架构?
对 XML 非常陌生,如何使用 XmlReader 以及如何破解这个东西? 一直在尝试 4 天,但不知道...
【问题讨论】:
【参考方案1】:尝试使用 xml linq 进行以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
namespace ConsoleApplication1
class Program
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
List<Student> students = Student.GetStudents(FILENAME);
DataTable dt = Student.CreateTable(students);
public class Student
public string Name get; set;
public string Year get; set;
public int? intTotalMarks get; set;
public List<TotalMarks> totalMarks get; set;
public static List<Student> GetStudents(string filename)
XDocument doc = XDocument.Load(filename);
List<Student> students = new List<Student>();
foreach (XElement xStudent in doc.Descendants("Student"))
Student student = new Student();
students.Add(student);
student.Name = (string)xStudent.Element("Name");
student.Year = (string)xStudent.Element("Year");
XElement xMarks = xStudent.Element("TotalMarks");
if (xMarks.HasElements)
foreach (XElement table in xStudent.Descendants("Table"))
TotalMarks totalMarks = new TotalMarks();
if (student.totalMarks == null) student.totalMarks = new List<TotalMarks>();
student.totalMarks.Add(totalMarks);
totalMarks.mode = (string)table.Attribute("Mode");
totalMarks.marks = table.Elements("Item").Select(x => new Mark()
mark = (int)x.Attribute("Marks"),
result = (decimal)x.Attribute("Result")
).ToList();
else
student.intTotalMarks = (int)xMarks;
return students;
public static DataTable CreateTable(List<Student> students)
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Year", typeof(string));
dt.Columns.Add("Mode", typeof(string));
dt.Columns.Add("Mark", typeof(int));
dt.Columns.Add("Result", typeof(decimal));
foreach(Student student in students)
if (student.totalMarks == null)
dt.Rows.Add(new object[]
student.Name,
student.Year,
null,
student.intTotalMarks
);
else
foreach (TotalMarks totalMark in student.totalMarks)
foreach (Mark mark in totalMark.marks)
dt.Rows.Add(new object[]
student.Name,
student.Year,
totalMark.mode,
mark.mark,
mark.result
);
return dt;
public class TotalMarks
public string mode get; set;
public List<Mark> marks get; set;
public class Mark
public int mark get; set;
public decimal result get; set;
【讨论】:
你能解释得更好吗?输出为:列出Name : Smith SSC: Marks=40 Result=10.6 Marks=100 Result=6.4 Marks=110 Result=5.7 Marks=120 Result=5 Marks=130 Result=4.3 Marks=140 Result=3.5 Marks=150 Result=2.8 Inter: Marks=40 Result=8.8 Marks=50 Result=8.8 Marks=60 Result=8.8 Marks=70 Result=8.8 Year:2013
对于 Jessy,存在 XmlSchema 我如何区分总分是否具有价值或内部元素或架构感到困惑如何处理?
Jessy 应该是这样的:按照您提供的代码:
使用 LINQ 选择 Student 的子“表格”元素。
var studentTables = from tables in SelectDataByName.Descendants("Table")
select tables;
if (studentTables.Any())
// do something
【讨论】:
以上是关于如何检查特定元素中是不是有值或其他类?的主要内容,如果未能解决你的问题,请参考以下文章