Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取结构未知的XML_C#_Xml - Fatal编程技术网

C# 如何读取结构未知的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

我正在为学校作业编写一个XML查看器,但我不知道如何在不知道文件结构的情况下加载XML文件。 读取文件后,我将在列表框中显示XML结构

这是学校的作业,结果应该是:

我有一个例子文件,我可以完全加载,但我被困在一个随机文件

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的结构/内容进行假设了?