我有两个包含 Main 方法的类,一个称为 WriteXML,该类将用户类(该类不包含 Main 方法)中的数据写入 XML 文件。 第二个带有 Main 方法的类称为 ReadXML,它应该读取由 WriteXML 类之前直接写入的 XML 文件。
WriteXML 类:
using System;
using System.Xml;
using static User;
internal class WriteXML
{
public static void Main(string[] args)
{
User user1 = new User();
user1.Vorname = "Max";
user1.Nachname = "Mustermann";
user1.Geburtstag = new DateTime(2000, 1, 1);
user1.Alter(user1.Geburtstag);
XmlTextWriter textWriter = new XmlTextWriter("C:\\Users\\ematric\\Desktop\\Philipp\\Solution/myXmlFile.xml", null);
textWriter.WriteStartDocument();
textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
textWriter.WriteComment("myXmlFile.xml in root dir");
textWriter.WriteStartElement("Student");
textWriter.WriteStartElement("r", "RECORD", "urn:record");
textWriter.WriteStartElement("Vorname", "");
textWriter.WriteString(user1.Vorname);
textWriter.WriteEndElement();
textWriter.WriteStartElement("Nachname", "");
textWriter.WriteString(user1.Nachname);
textWriter.WriteEndElement();
textWriter.WriteStartElement("Geburtstag", "");
textWriter.WriteString(user1.Geburtstag.ToString());
textWriter.WriteEndElement();
textWriter.WriteStartElement("Alter", "");
textWriter.WriteString(user1.Alter(user1.Geburtstag).ToString());
textWriter.WriteEndElement();
textWriter.WriteEndDocument();
textWriter.Close();
}
}
ReadXML 类:
using System;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
internal class ReadXML
{
public static void Main(string[] args)
{
Console.WriteLine(10);
XmlTextReader textReader = new XmlTextReader("C:\\Users\\ematric\\Desktop\\Philipp\\Solution/myXmlFile.xml");
textReader.Read();
while (textReader.Read())
{
textReader.MoveToElement();
Console.WriteLine("XmlTextReader Properties Test");
Console.WriteLine("===================");
Console.WriteLine("Name:" + textReader.Name);
Console.WriteLine("Base URI:" + textReader.BaseURI);
Console.WriteLine("Local Name:" + textReader.LocalName);
Console.WriteLine("Attribute Count:" + textReader.AttributeCount.ToString());
Console.WriteLine("Depth:" + textReader.Depth.ToString());
Console.WriteLine("Line Number:" + textReader.LineNumber.ToString());
Console.WriteLine("Node Type:" + textReader.NodeType.ToString());
Console.WriteLine("Attribute Count:" + textReader.Value.ToString());
}
}
}
用户类别:
using System.Net.Mail;
internal class User
{
public string Vorname;
public string Nachname;
public DateTime Geburtstag = new DateTime();
private int alter;
public int Alter(DateTime Geburtstag)
{
this.Geburtstag = Geburtstag;
alter = (int) (DateTime.Now - Geburtstag).TotalDays / 365;
return alter;
}
}
当我在 Visual Studio 中启动程序时,出现错误,因为程序不知道从哪里开始,所以我调整为首先执行 WriteXML 类。该文件已按我的预期创建,但 ReadXML 类未读取它。如果该文件已创建并且我首先启动 ReadXML 类,则该文件将按我想要的方式读取。 所以我想知道为什么当 WriteXML 直接在 ReadXML 类之前启动时不执行 ReadXML 类。
一切都应该正常工作。 另外,您不需要在循环中重复相同的数据
void Main()
{
string xmlFile = "C:\\1\\myXmlFile.xml";
if (!File.Exists(xmlFile))
CreateXML(xmlFile);
ReadXML(xmlFile);
}
internal void CreateXML(string xmlFile)
{
User user1 = new User();
user1.Vorname = "Max";
user1.Nachname = "Mustermann";
user1.Geburtstag = new DateTime(2000, 1, 1);
user1.Alter(user1.Geburtstag);
XmlTextWriter textWriter = new XmlTextWriter(xmlFile, null);
textWriter.WriteStartDocument();
textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
textWriter.WriteComment("myXmlFile.xml in root dir");
textWriter.WriteStartElement("Student");
textWriter.WriteStartElement("r", "RECORD", "urn:record");
textWriter.WriteStartElement("Vorname", "");
textWriter.WriteString(user1.Vorname);
textWriter.WriteEndElement();
textWriter.WriteStartElement("Nachname", "");
textWriter.WriteString(user1.Nachname);
textWriter.WriteEndElement();
textWriter.WriteStartElement("Geburtstag", "");
textWriter.WriteString(user1.Geburtstag.ToString());
textWriter.WriteEndElement();
textWriter.WriteStartElement("Alter", "");
textWriter.WriteString(user1.Alter(user1.Geburtstag).ToString());
textWriter.WriteEndElement();
textWriter.WriteEndDocument();
textWriter.Close();
}
internal void ReadXML(string xmlFile)
{
XmlTextReader textReader = new XmlTextReader(xmlFile);
textReader.Read();
Console.WriteLine("XmlTextReader Properties Test");
Console.WriteLine("Base URI:" + textReader.BaseURI);
Console.WriteLine("===================");
while (textReader.Read())
{
if (textReader.NodeType == XmlNodeType.Element)
{
Console.WriteLine("---");
Console.WriteLine($"Attribute Count: {textReader.AttributeCount.ToString()}");
Console.WriteLine($"Line Number: {textReader.LineNumber.ToString()}");
Console.WriteLine($"Depth:{textReader.Depth.ToString()}");
Console.WriteLine($"Name: {textReader.Name}: {textReader.ReadString()}");
}
}
}
internal class User
{
public string Vorname;
public string Nachname;
public DateTime Geburtstag = new DateTime();
private int alter;
public int Alter(DateTime Geburtstag)
{
this.Geburtstag = Geburtstag;
alter = (int)(DateTime.Now - Geburtstag).TotalDays / 365;
return alter;
}
}
结果将是
XmlTextReader Properties Test
Base URI:file:///C:/1/myXmlFile.xml
===================
---
Attribute Count: 0
Line Number: 4
Depth:0
Name: Student:
---
Attribute Count: 0
Line Number: 6
Depth:2
Name: Vorname: Max
---
Attribute Count: 0
Line Number: 7
Depth:2
Name: Nachname: Mustermann
---
Attribute Count: 0
Line Number: 8
Depth:2
Name: Geburtstag: 1/1/2000 12:00:00 AM
---
Attribute Count: 0
Line Number: 9
Depth:2
Name: Alter: 24