XML:如何从IEnumerable对象中删除元素?

时间:2013-09-11 12:37:56

标签: c# xml xelement

我使用XElement类动态生成XML文件。感兴趣的顺序如下:

<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”子节点没有退出,我想删除“Action”节点。

生成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 个答案:

答案 0 :(得分:1)

选择所有没有ActionDate元素的元素(即它为null)并从actions元素中删除它们:

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

BTW如果要生成XML,请考虑不要添加这些元素。它比添加和删除更好。

答案 1 :(得分:0)

我再举一个例子:

     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");