簡體   English   中英

如何讀取結構未知的XML

[英]How do I read an XML with unknown structure

我正在為學校的作業編寫XML查看器,但是我不知道如何在不知道文件結構的情況下加載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包含執行此操作所需的所有屬性,例如ChildNodesAttributesValue

不確定用例,但是在編寫小型作業調度程序時,我將每個作業表示為3件事情-調度程序,實現特定作業的完全合格的類名,一些文本作業上下文(XML)。 當調度程序需要在計划的時間執行作業時,正在使用反射和程序集的已知位置創建作業類時,它將XML上下文傳遞給作業構造函數,該構造函數知道如何處理該作業。

同樣,如果有可能讓你在XML 定義一個類,那么你可以先閱讀並采取相應的行動。

如果只是查看器,為什么不直接將XML加載到DataSet或DataTable中,然后將其綁定到DataGrid

如果您是我,我將嘗試使用LINQ to XML,重點是XElement提供的功能-它是更友好,更簡單的imo。 我還建議您使用遞歸(如Reed Copsey建議的那樣)遍歷XML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM