2013-05-19 92 views
1

我想創建一個帶有嵌套對象的嵌套元素的XML文檔,但該XML文件出來太平。我如何得到這個迭代對象內的對象以在元素內創建元素。如何從嵌套對象創建XML文檔?

public object traverse(object pc, string xpath, XmlDocument xmldoc) 
{ 
    IEnumerable enumerable = pc as IEnumerable; 
    if (enumerable != null) 
    { 
     foreach (object element in enumerable) 
     { 
      RecurseObject ro = new RecurseObject(); 
      ro.traverse(elementArray, xpath, xmldoc); 
     } 
    } 
    else 
    {       
     Type arrtype = pc.GetType(); 
     string elementname = arrtype.Name; 
     foreach (var prop in pc.GetType().GetProperties()) 
     { 

      XmlElement xmlfolder = null; 
      XmlNode xmlnode3 = null; 
      string propname = prop.Name; 
      string propvalue = "null"; 
      if (xmldoc.SelectSingleNode(xpath + "/" + elementname) == null) 
      { 
       xmlnode3 = xmldoc.SelectSingleNode(xpath); 
       xmlfolder = xmldoc.CreateElement(null, elementname, null); 
       xmlnode3.AppendChild(xmlfolder); 

      } 
      if (prop.GetValue(pc, null) != null) 
      { 
       propvalue = prop.GetValue(pc, null).ToString(); 
      } 

      xmlnode3 = xmldoc.SelectSingleNode(xpath + "/" + elementname); 
      xmlfolder = xmldoc.CreateElement(null, propname, null); 
      xmlfolder.InnerText = propvalue; 
      xmlnode3.AppendChild(xmlfolder); 
     } 
    } 

    return null; 
} 
+1

** a)**你的複雜對象是怎麼樣的** b)**你想在最後得到什麼樣的xml ** c)**你有沒有讀過關於xml序列化的任何內容? – I4V

+0

即使在格式化代碼之後,您仍然不清楚您到底想要達到什麼目的。添加輸入數據和期望輸出的示例。 –

+0

I4V是對的。您可以通過序列化從對象自動生成XML – jugg1es

回答

1

正如在評論中提到的那樣,請注意,.NET包括將對象圖轉換爲XML的能力,而無需編寫任何代碼來生成XML。這個過程被稱爲序列化,應該很容易在網上或在這裏找到示例。

如果您更喜歡對流程的完全控制並希望使用反射,則Fasterflect包含用於將對象圖轉換爲XML的代碼。這是一個有助手的庫,可以使反射更簡單快捷。您可以在this source file中找到XML擴展的代碼。請注意,被引用的實現檢測或處理循環引用,而內置的序列化機制則可以。

至於你自己的解決方案,你似乎沒有任何代碼來檢測一個屬性值本身是一個對象還是一個原始值。您還需要爲對象屬性遞歸調用遍歷方法以處理整個對象圖。