我正在为学校作业编写一个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);
}
答案 0 :(得分:8)
您无法在不知道结构的情况下将XML数据转换为已知类(如Site
)类,因为您需要某种方法将数据迁移到类中构造函数参数/属性/等。
话虽这么说,如果您只想查看或检查XML文件本身,您可以递归检查根元素内的XmlNode元素。
XmlNode包含您执行此操作所需的所有属性,例如ChildNodes,Attributes和Value。
答案 1 :(得分:0)
不确定用例,但在编写一个小型作业调度程序时,我将每个作业表示为一组3件事 - 一个调度程序,一个实现特定作业的完全限定类名,一些文本作业上下文(XML)。当调度程序需要在预定时间执行作业时,在使用反射和程序集的已知位置创建作业类时,它会将XML上下文传递给作业构造函数,该构造函数知道如何处理它。
同样,如果您可以在 XML中定义类,那么您可以先读取它并采取相应的行动。
答案 2 :(得分:0)
如果它只是一个查看器,为什么不将XML加载到DataSet或DataTable中,然后将其绑定到DataGrid
答案 3 :(得分:0)
如果我是你,我会尝试使用LINQ to XML,强调XElement提供的功能 - 它更友好,更容易imo。我还建议您使用递归(如Reed Copsey建议的那样)来遍历XML。