[英]How do I read an XML with unknown structure
我正在為學校的作業編寫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
),因為您需要某種方式將數據遷移到類構造函數parameter / properties / etc中。
話雖如此,如果您只想查看或檢查XML文件本身,則可以遞歸檢查根元素內的XmlNode元素。
XmlNode包含執行此操作所需的所有屬性,例如ChildNodes , Attributes和Value 。
不確定用例,但是在編寫小型作業調度程序時,我將每個作業表示為3件事情-調度程序,實現特定作業的完全合格的類名,一些文本作業上下文(XML)。 當調度程序需要在計划的時間執行作業時,正在使用反射和程序集的已知位置創建作業類時,它將XML上下文傳遞給作業構造函數,該構造函數知道如何處理該作業。
同樣,如果有可能讓你在XML 中定義一個類,那么你可以先閱讀並采取相應的行動。
如果只是查看器,為什么不直接將XML加載到DataSet或DataTable中,然后將其綁定到DataGrid
如果您是我,我將嘗試使用LINQ to XML,重點是XElement提供的功能-它是更友好,更簡單的imo。 我還建議您使用遞歸(如Reed Copsey建議的那樣)遍歷XML。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.