-1

我正在学习 C#,我需要一些建议。

我正在尝试从 XML 文件创建用户(Active Directory)。这些用户是学生和教师。对于每个用户,我需要他的姓名姓氏生日来生成他的登录名、密码

  • 一个学生只能是一个组(他的班级)的成员。
  • 一位老师可以有一个或多个小组(他教的班级)。

我需要的所有信息都在 XML 中。

在 powershell 中,它是这样工作的:

  • 学生:(tab[name,surname,birthdate,login,group]也可以在 c# 中工作)
  • 教师 :tab[name,surname,birthdate,login,tab[groups]]

我如何在 C# 中做到这一点?我尝试使用 3D 数组,但它丑陋且性能不高,有数百名用户......有没有更好的方法来使用列表来做到这一点?数组列表 ?

对不起我的英语不好...

感谢您的帮助(和代码片段^^)!

教师 XML 示例:

<DATA>
-<PERSONS>
--<PERSON ID="6022">
---<NAME>DOE</NAME>
---<SURNAME>John</SURNAME>
---<BIRHDATE>1952-06-29</DATE_NAISSANCE>
--</PERSON>
--...
-</PERSONS>
-<CLASSES>
--<CLASS CODE="3A">
---<TEACHERS>
----<TEACHER ID="6022">
-----<SUBJECT>Maths</SUBJECT>
----</TEACHER>
---</TEACHERS>
--</CLASS>
--<CLASS CODE="5D">
---<TEACHERS>
----<TEACHER ID="6022">
-----<SUBJECT>Maths</SUBJECT>
----</TEACHER>
---</TEACHERS>
--</CLASS>
...
-</CLASSES>
</DATA>
4

3 回答 3

4

您可能想看看XDocument

您可以通过调用创建一个XDocument.Parse("<myDoc></myDoc>")

例子:

var xml = @"<DATA>
<PERSONS>
<PERSON ID=""6022"">
<NAME>DOE</NAME>
<SURNAME>John</SURNAME>
<BIRHDATE>19520629</BIRHDATE>
</PERSON>
</PERSONS>
<CLASSES>
<CLASS CODE=""3A"">
<TEACHERS>
<TEACHER ID=""6022"">
<SUBJECT>Maths</SUBJECT>
</TEACHER>
</TEACHERS>
</CLASS>
<CLASS CODE=""5D"">
<TEACHERS>
<TEACHER ID=""6022"">
<SUBJECT>Maths</SUBJECT>
</TEACHER>
</TEACHERS>
</CLASS>
</CLASSES>
</DATA>";

var doc = XDocument.Parse(xml);

var peopleElements = doc
    .Elements("DATA")
    .Elements("PERSONS")
    .Elements("PERSON");
var q = from person in peopleElements
select new {
    Name = person.Element("NAME").Value,
    BirthDate = person.Element("BIRHDATE").Value
};

var peopleList = q.ToList();
于 2013-05-02T21:38:17.553 回答
0

我不完全确定您在寻找什么:您现在正在使用要更改的 Array 做什么?您是在谈论每个人只是数组中的一串字符串吗?鉴于您所说的,您应该真正创建一个 Person 类,该类具有学生和教师共享的属性,然后是另外两个类,学生和教师,它们都继承自该类。那时,在 Student 上拥有 Class 字符串属性和在 Teacher 上拥有 ClassesTaught List< string > 属性而不是单个 Group 属性是有意义的。3d 数组非常适合最好表示为 3d 数组的事物(例如 3d 空间中的点),但对于有组织的数据列表,最好将数据实际组织到具有属性的类中。

那时,您会将所有数据解析为单个 Person 对象,并将它们添加到 List < Person >。(或者,如果您愿意,根据您对它的处理,可能是 Dictionary < int, Person >,如果该 ID 属性实际上是一个唯一标识符,并且您希望通过该 id 键轻松访问您的 Person 对象。)

于 2013-05-02T21:46:49.067 回答
0

ArrayList 的用例真的不多了。如果你能帮助它,避免它和它不断的铸造和重新铸造的伴侣。

于 2013-05-02T22:07:01.080 回答