我是XML新手,我试着创建一个窗口窗体来收集每个教师、学生、操作员和技术人员的编号、姓名和级别。但是这个代码太长了。你有什么建议用c#创建这个XML吗?每个雇员的编号、姓名和级别的信息将从4个文本框中获取。另外,描述也将从文本框中获取。
<Simulator>
<Flight ID="1" Description="rainy_day">
<Instructor Num="14213124">
<Name>Jack</Name>
<Surname>Sparrow</Surname>
<Rank>General</Rank>
</Instructor>
<Student Num="56475679">
<Name>Adam</Name>
<Surname>Black</Surname>
<Rank>Lieutenant</Rank>
</Student>
<Operator Num="75846474">
<Name>Gabriel</Name>
<Surname>Red</Surname>
<Rank>Op</Rank>
</Operator>
<Technician Num="85425484">
<Name>Samuel</Name>
<Surname>Long</Surname>
<Rank>Tec</Rank>
</Technician>
</Flight>
</Simulator>
这是我试过的代码。如果我一遍又一遍地为每个员工写这个代码,它会很长
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
XmlElement rootNode = xmlDoc.DocumentElement;
xmlDoc.InsertAfter(xmlDeclaration, rootNode);
XmlNode parentNode = xmlDoc.CreateElement("Users");
XmlNode subNode = xmlDoc.CreateElement("Instructor");
XmlAttribute numAtt = xmlDoc.CreateAttribute("Num");
numAtt.Value = num.ToString();
XmlAttribute nameAtt = xmlDoc.CreateAttribute("Name");
nameAtt.Value = name;
XmlAttribute surnameAtt = xmlDoc.CreateAttribute("Surname");
surnameAtt.Value = surname;
XmlAttribute rankAtt = xmlDoc.CreateAttribute("Rank");
rankAtt.Value = rank;
subNode.Attributes.Append(numAtt);
subNode.Attributes.Append(nameAtt);
subNode.Attributes.Append(surnameAtt);
subNode.Attributes.Append(rankAtt);
xmlDoc.AppendChild(parentNode);
parentNode.AppendChild(subNode);
检查ID部件
var userElements = xDoc.Descendants("Flight").ToList();
string lastID = userElements.Select(x => (x.Attribute("ID").Value))
.OrderByDescending(x => x)
.First()
.ToString();
int lastID_int = Int16.Parse(lastID) + 1;
if (lastID_int <= 0)
lastID_int = 0;
string current = lastID_int.ToString();
Simulator sim = new Simulator(current, textbox_description.Text);
2条答案
按热度按时间6gpjuf901#
下面是使用XML Linq的类:
vs91vp4v2#
您可能应该使用xmlSerializer,而不是尝试手动创建xml树。
这应该可以让您为数据创建类,并让序列化程序负责将对象转换为xml:
这可能不会给予您想要的确切布局,但通常可以是controlled by attributes。