2013-09-11 2 views
3

Я динамически генерирую XML-файл, используя класс XElement. Интерес последовательность выглядит следующим образом:XML: Как удалить элемент из объекта IEnumerable?

<Actions> 
    <Action Id="35552" MailRuId="100000"> 
     <ActionTypeId>2</ActionTypeId> 
     <GenreTypeId>16</GenreTypeId> 
    </Action> 
    <Action Id="36146" MailRuId="100001"> 
     <ActionTypeId>7</ActionTypeId> 
     <GenreTypeId>2</GenreTypeId> 
     <ActionDate Id="127060" FreeTicketsCount="26" ReservedTicketsCount="3">06.09.2013 18:00:00</ActionDate> 
    </Action> 
</Actions> 

Я хочу, чтобы удалить узел «Действие», если «ActionDate» дочерний узел не выход.

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

var actionElement = new XElement("Action", 
    new XElement("ActionTypeId", first.ActionTypeId), 
    new XElement("GenreTypeId", first.GenreTypeId)); 

IEnumerable<XElement> seanceElements = infos 
    .GroupBy(ti => ti.ActionDate) 
    .Select(CreateSeanceElement); 

actionElement.Add(seanceElements); 

Метод CreateSeanceElement создает узел «ActionDate», но, как я уже сказал, что может или не может быть создан.

ответ

2

Выберите все элементы, которые не имеют ActionDate элемент (т.е. она равна нулю) и удалить их из действия элемента:

actions.Elements("Action") 
     .Where(a => a.Element("ActionDate") == null) 
     .Remove(); 

BTW, если вы создаете XML, рассмотрим не добавлять такие элементы. Это лучше, чем добавлять и удалять.

+0

делает '' IEnumerable иметь 'Remove' метод? – Romoku

+0

IEnumerable не имеет метода удаления. – tesicg

+0

@Romoku да, у него есть [Extensions.Remove Метод] (http://msdn.microsoft.com/en-us/library/bb357554.aspx) –

1

я дам вам еще один пример:

 XDocument doc = XDocument.Load("D:\\tmp.xml"); 
    List<XElement> elements = new List<XElement>(); 

    foreach (XElement cell in doc.Element("Actions").Elements("Action")) 
    { 
     if (cell.Element("ActionDate") == null) 
     { 
      elements.Add(cell); 
     } 
    } 

    foreach (XElement xElement in elements) 
    { 
     xElement.Remove(); 
    } 

    doc.Save("D:\\tst.xml"); 
Смежные вопросы