C# 如何读取结构未知的XML
我正在为学校作业编写一个XML查看器,但我不知道如何在不知道文件结构的情况下加载XML文件。 读取文件后,我将在列表框中显示XML结构 这是学校的作业,结果应该是: 我有一个例子文件,我可以完全加载,但我被困在一个随机文件C# 如何读取结构未知的XML,c#,xml,C#,Xml,我正在为学校作业编写一个XML查看器,但我不知道如何在不知道文件结构的情况下加载XML文件。 读取文件后,我将在列表框中显示XML结构 这是学校的作业,结果应该是: 我有一个例子文件,我可以完全加载,但我被困在一个随机文件 XmlDocument doc = new XmlDocument(); using(XmlReader xmlReader = XmlReader.Create("c:\\temp\\sites.xml")) { //Load file d
XmlDocument doc = new XmlDocument();
using(XmlReader xmlReader = XmlReader.Create("c:\\temp\\sites.xml"))
{
//Load file
doc.Load(xmlReader);
XmlNode root = doc.DocumentElement;
foreach (XmlNode siteNode in root)
{
//Nodes
XmlNode URLNode = siteNode.FirstChild;
XmlNode EmailNode = siteNode.LastChild;
//Create site
Site site = new Site(URLNode.FirstChild.Value, EmailNode.FirstChild.Value);
//Add to list
sites.Add(site);
}
Console.WriteLine(sites.Count);
}
在不了解结构的情况下,您将无法将XML数据转换为已知类(如Site类),因为您需要某种方法将数据迁移到类构造函数参数/属性等 也就是说,如果您只想查看或检查XML文件本身,那么可以递归地检查根元素中的XmlNode元素
包括执行此操作所需的所有属性,例如和。在不了解结构的情况下,您无法将XML数据转换为已知类(如站点类),因为您需要某种方法将数据迁移到类构造函数参数/属性等 也就是说,如果您只想查看或检查XML文件本身,那么可以递归地检查根元素中的XmlNode元素
包括执行此操作所需的所有属性,例如和。不确定用例,但在编写一个小型作业调度器时,我将每个作业表示为一组三件事—调度器、实现特定作业的完全限定类名、一些文本作业上下文XML。当计划程序需要在计划的时间执行作业时,当它使用反射和程序集的已知位置创建作业类时,它将XML上下文传递给作业构造函数,该构造函数知道如何处理它
类似地,如果您可以在XML中定义一个类,那么您可以先阅读它并采取相应的行动。不确定用例,但在编写一个小型作业调度器时,我将每个作业表示为一组3件事-调度器、实现特定作业的完全限定类名、一些文本作业上下文XML。当计划程序需要在计划的时间执行作业时,当它使用反射和程序集的已知位置创建作业类时,它将XML上下文传递给作业构造函数,该构造函数知道如何处理它
类似地,如果您可以在XML中定义一个类,那么您可以先读取它并相应地执行操作。如果它只是一个查看器,为什么不将XML加载到数据集或数据表中,然后将其绑定到DataGrid中呢,为什么不直接将XML加载到数据集或数据表中,然后将其绑定到数据网格中呢?如果我是你,我会尝试使用LINQ to XML,重点是它提供的功能,在我看来,它更友好、更容易。我还建议你像Reed Copsey建议的那样使用递归来遍历XML。如果我是你,我会尝试使用LINQ to XML,重点介绍了所提供的功能—在我看来,它更友好、更简单。我还建议您使用Reed Copsey建议的递归来遍历XML。但是您想做什么?如果要显示带/不带属性的节点名称,则不需要知道结构。您只需遍历文件并输出所需的数据。看起来您已经对正在读取的XML的结构/内容做出了假设?但是您想做什么呢?如果要显示带/不带属性的节点名称,则不需要知道结构。您只需遍历文件并输出所需的数据,看起来您已经在对正在读取的XML的结构/内容进行假设了?