执行写入 XML 文件的 Main 方法后,未执行应读取文件的 Main 方法

问题描述 投票:0回答:1

我有两个包含 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 类。

c# xml
1个回答
0
投票

一切都应该正常工作。 另外,您不需要在循环中重复相同的数据

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
© www.soinside.com 2019 - 2024. All rights reserved.