2013-03-13 3 views
-1

Я хочу создать XML, и это будет включать в себя что-то выглядит следующим образом: -Динамические Вложенные XElements

<?xml version="1.0" encoding="utf-8"?> 
<Groups> 
    <Group> 
     <Id>1</Id> 
     <GroupName>Group1</CategoryId> 
     <Products> 
      <Product> 
       <ProductId>1</ProductId> 
       <ProductName>Apples</ProductName> 
      </Product> 
      <Product> 
       <ProductId>2</ProductId> 
       <ProductName>Oranges</ProductName> 
      </Product> 
      <Product> 
       <ProductId>3</ProductId> 
       <ProductName>Lemons</ProductName> 
      </Product> 
     </Products> 
     <DateCreated></DateCreated> 
     <DateModified></DateModified> 
    </Group> 
    <Group> 
     <Id>2</Id> 
     <GroupName>Group2</CategoryId> 
     <Products> 
      <Product> 
       <ProductId>3</ProductId> 
       <ProductName>Grapes</ProductName> 
      </Product> 
      <Product> 
       <ProductId>4</ProductId> 
       <ProductName>PineApple</ProductName> 
      </Product> 
     </Products> 
     <DateCreated></DateCreated> 
     <DateModified></DateModified> 
    </Group> 
</Groups> 

Как вы можете видеть из моего примера, количество Product может варьироваться от 1 группы к другой.

Как создать динамический XML и вы также сможете прочитать один и тот же XML позже.

В данный момент мой код для создания XML выглядит следующим образом:

internal XElement ConstructGroupXML(int numberOfItems) 
{ 
    XElement xmlList = new XElement("Groups", 
     from a in dataModel.CreateGroupList(numberOfItems) 
     select new XElement("Group", 
      new XElement("Id", a.Id), 
      new XElement("GroupName", a.GroupName), 
      new XElement("Products", 
       new XElement("ProductId", a.Products[i].Id), 
       new XElement("ProductName", a.Products[i].ProductName), 
       new XElement("CategoryId", a.Products[i].Category.Id), 
       new XElement("CategoryName", a.Products[i].Category.CategoryName), 
       new XElement("SubCategoryId", a.Products[i].SubCategory.Id), 
       new XElement("SubCategoryName", a.Products[i].SubCategory.SubCategoryName), 
      new XElement("DateCreated", a.DateCreated), 
      new XElement("DateModified", a.DateModified) 
     ) 
    ); 

    return xmlList; 
} 

Метод CreateGroupList возвращает объект с группами и списками продуктов, внедренных в этих группах, так и для каждой группы я хочу цикл внутри списка продуктов и генерировать XML.

+1

Вы можете добавить код для 'CreateGroupList (numberOfItems)'? Вам не хватает закрывающих круглых скобок в строке 'new XElement (« DateModified », a.DateModified));' it должно быть 'new XElement (« DateModified », a.DateModified)));' –

+0

да вы прямо о скобках. AddGroup не является чем-то особенным, просто перебирает некоторые продукты и добавляет их в список и присоединяет их к группе. Его список внутри объекта группы – Johann

ответ

1

Хорошо мне удалось найти решение:

from o in a.Products 
select new XElement("Products", 
    new XAttribute("ProductId", o.Id), 
    new XElement("ProductName", o.ProductName), 
    new XElement("CategoryId", o.Category.Id), 
    new XElement("CategoryName", o.Category.CategoryName), 
    new XElement("SubCategoryId", o.SubCategory.Id), 
    new XElement("SubCategoryName", o.SubCategory.SubCategoryName), 

Теперь мне просто нужно, чтобы узнать, как читать этот XML

+0

Я всегда задавался вопросом, почему люди используют переменную '' 'для класса' Group' и 'o' для класса Product. Похоже, что имена переменных 'g' и' p' уже используются для яблок и лука. –

+0

Спасибо @Johann, это то, что мне нужно! – mack