2013-05-19 59 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扩展的代码。请注意,被引用的实现检测或处理循环引用,而内置的序列化机制则可以。

至于你自己的解决方案,你似乎没有任何代码来检测一个属性值本身是一个对象还是一个原始值。您还需要为对象属性递归调用遍历方法以处理整个对象图。