2013-05-19 3 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. Этот процесс называется сериализацией, и его легко найти в Интернете или здесь, в SO.

Если вы предпочитаете полный контроль над процессом и хотите использовать отражение, Fasterflect содержит код для преобразования графа объекта в XML. Это библиотека с помощниками, чтобы сделать отражение легче и быстрее. Код для расширений XML можно найти в this source file. Имейте в виду, что ссылочная реализация обнаруживает или обрабатывает циклические ссылки, тогда как встроенные механизмы сериализации делают.

Что касается вашего собственного решения, у вас нет никакого кода для определения того, является ли значение свойства само по себе объектом или примитивным значением. Рекурсивно вызывать метод traverse также для свойств объекта, чтобы обрабатывать весь граф объекта.

Смежные вопросы