我是 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);
uj5u.com熱心網友回復:
這是使用 XML Linq 的類:
public class Simulator
{
XDocument doc = null;
public Simulator(string filename)
{
doc = XDocument.Load(filename);
}
public Simulator(string id, string description)
{
string ident = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Simulator></Simulator>";
doc = XDocument.Parse(ident);
XElement flight = new XElement("Flight", new object[] {
new XAttribute("ID", id),
new XAttribute("Description", description)
});
doc.Root.Add(flight);
}
public string AddUser(string flightID, string role, string number, string name, string surname, string rank)
{
XElement flight = doc.Descendants("Flight").Where(x => (string)x.Attribute("ID") == flightID).FirstOrDefault();
if (flight != null)
{
XElement user = new XElement(role, new object[] {
new XAttribute("Num", number),
new XElement("Name", name),
new XElement ("Surname", surname),
new XElement("Rank", rank)
});
flight.Add(user);
return "GOOD";
}
else
{
return "Flight ID doesn't exist";
}
}
public string AddFlight(string flightID, string description)
{
XElement flight = doc.Descendants("Flight").Where(x => (string)x.Attribute("ID") == flightID).FirstOrDefault();
if (flight == null)
{
flight = new XElement("Flight", new object[] {
new XAttribute("ID", flightID),
new XAttribute("Description", description)
});
doc.Root.Add(flight);
return "Good";
}
else
{
return "Flight ID already exists";
}
}
public string AddErrors(string flightID, XElement errorLog)
{
XElement flight = doc.Descendants("Flight").Where(x => (string)x.Attribute("ID") == flightID).FirstOrDefault();
if(flight == null)
{
return "Flight ID doesn't exist";
}
else
{
flight.Add(errorLog);
return "GOOD";
}
}
public void WriteXml(string filename)
{
doc.Save(filename);
}
}
uj5u.com熱心網友回復:
您可能應該使用xmlSerializer而不是嘗試手動創建 xml 樹。
這應該讓您為資料創建類,并讓序列化程式擔心將物件轉換為 xml:
public class Person{
public string Num{get;set;}
public string Name {get;set;}
public string Surname {get;set;}
public string Rank{get;set;}
}
public class Flight{
public Person Instructor {get;set;}
public Person Student {get;set;}
....
}
var serializer = new XmlSerializer(typeof(Flight));
var writer = new StreamWriter(filename);
serializer.Serialize(writer, myFlight);
這可能無法準確地為您提供所需的布局,但通常可以通過 attributes 控制。另請參閱Json .net以獲得更流行的 xml 替代方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506812.html
