我使用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”节点,但正如我所说,它可以创建或不可以创建。
答案 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");