2011-10-26 110 views
1

我正在爲一個學校作業編碼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); 
} 
+2

但是你想要做什麼?如果要顯示帶/不帶屬性的節點名稱,則不需要知道結構。您只需遍歷該文件並輸出您之後的數據。 – Pateman

+0

看起來您已經對您正在閱讀的XML的結構/內容做出了假設? – 48klocs

回答

8

你不會是能夠把XML數據轉換爲已知類別(如您的Site)類在不知道的東西的結構,因爲你需要一些方法來將數據遷移到類構造函數參數/屬性等。這就是說,如果你只想查看或檢查XML文件本身,你可以遞歸地檢查根元素內的XmlNode元素。

XmlNode包括您需要執行此操作的所有屬性,例如ChildNodes,AttributesValue

0

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

同樣,如果您可以在範圍內定義類XML,那麼您可以先閱讀它並採取相應措施。

0

如果它只是一個瀏覽器,爲什麼不把XML只是加載到數據集或數據表,然後將其綁定到DataGrid

0

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