如何读取结构未知的XML

时间:2011-10-26 19:47:40

标签: c# xml

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

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

我有一个示例文件,我可以完美加载,但我被一个随机文件卡住了。

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);
}

4 个答案:

答案 0 :(得分:8)

您无法在不知道结构的情况下将XML数据转换为已知类(如Site)类,因为您需要某种方法将数据迁移到类中构造函数参数/属性/等。

话虽这么说,如果您只想查看或检查XML文件本身,您可以递归检查根元素内的XmlNode元素。

XmlNode包含您执行此操作所需的所有属性,例如ChildNodesAttributesValue

答案 1 :(得分:0)

不确定用例,但在编写一个小型作业调度程序时,我将每个作业表示为一组3件事 - 一个调度程序,一个实现特定作业的完全限定类名,一些文本作业上下文(XML)。当调度程序需要在预定时间执行作业时,在使用反射和程序集的已知位置创建作业类时,它会将XML上下文传递给作业构造函数,该构造函数知道如何处理它。

同样,如果您可以在 XML中定义类,那么您可以先读取它并采取相应的行动。

答案 2 :(得分:0)

如果它只是一个查看器,为什么不将XML加载到DataSet或DataTable中,然后将其绑定到DataGrid

答案 3 :(得分:0)

如果我是你,我会尝试使用LINQ to XML,强调XElement提供的功能 - 它更友好,更容易imo。我还建议您使用递归(如Reed Copsey建议的那样)来遍历XML。