C# 从生成的XML文档中省略可选属性,遵循LINQ到XML的原理

C# 从生成的XML文档中省略可选属性,遵循LINQ到XML的原理,c#,xml,linq,C#,Xml,Linq,我正在使用LINQtoXML生成XML文档。我希望XML文档是最小的,即应该忽略很少使用的属性。目前,我是这样做的: XElement元素=新的XElement(“myelement”, 新X属性(“财产1”,价值1), 新的X属性(“财产2”,价值2)); 如果(!string.IsNullOrEmpty(rareValue1)) { 添加(新的XAttribute(“rareProperty1”,rareValue1)); } 如果(!string.IsNullOrEmpty(rareVal

我正在使用LINQtoXML生成XML文档。我希望XML文档是最小的,即应该忽略很少使用的属性。目前,我是这样做的:

XElement元素=新的XElement(“myelement”,
新X属性(“财产1”,价值1),
新的X属性(“财产2”,价值2));
如果(!string.IsNullOrEmpty(rareValue1))
{
添加(新的XAttribute(“rareProperty1”,rareValue1));
}
如果(!string.IsNullOrEmpty(rareValue2))
{
添加(新的XAttribute(“rareProperty2”,rareValue2));
}
如果(!string.IsNullOrEmpty(rareValue3))
{
添加(新的X属性(“RAREProperty 3”,rareValue3));
}
但实际上,if希望省略“if”-语句,因为它们不是很优雅,并且与LINQ到XML的哲学相矛盾,在LINQ到XML的哲学中,您可以通过嵌套轻松创建XML树,如中所述。 所以,我想这样做:

XElement元素=新的XElement(“myelement”,
新X属性(“财产1”,价值1),
新X属性(“物业2”,价值2),
新的XAttribute(“rareProperty1”,string.IsNullOrEmpty(rareValue1)?标志。省略:rareValue1),
新的XAttribute(“rareProperty2”,string.IsNullOrEmpty(rareValue2)?标志。省略:rareValue1),
新的XAttribute(“rareProperty3”,string.IsNullOrEmpty(rareValue3)?标志。省略:rareValue1),
);
也就是说,C#源代码在其构造函数中包含
myelement
的所有子属性。和
Flag.ommit
是一种指示LINQtoXML不生成XML属性的方法


使用标准LINQ to XML或某些通用实用程序函数可以实现这一点吗?

添加子节点的各种方法都会忽略
null
值-因此您只需要一个助手方法:

public static XAttribute AttributeOrNull(XName name, string value)
{
    return string.IsNullOrEmpty(value) ? null : new XAttribute(name, value);
}
然后:


添加子节点的各种方法都会忽略
null
值-因此您只需要一个助手方法:

public static XAttribute AttributeOrNull(XName name, string value)
{
    return string.IsNullOrEmpty(value) ? null : new XAttribute(name, value);
}
然后:


它起作用了;谢谢你的快速回复。不过,还有一个问题:是特定于LINQtoXML丢弃空元素的事实,还是这是一个C#特性?我这样问是因为
XContainer.Add()
的MSDN章节没有提到这种行为。@fmunkert:这是LINQ到XML的特性。C#编译器将
null
值正常地传递给
Add
方法。From(从文档链接)-“如果内容为空,则不添加任何内容。传递集合时,集合中的项目可以为空。集合中的空项目对树没有影响。”它起作用;谢谢你的快速回复。不过,还有一个问题:是特定于LINQtoXML丢弃空元素的事实,还是这是一个C#特性?我这样问是因为
XContainer.Add()
的MSDN章节没有提到这种行为。@fmunkert:这是LINQ到XML的特性。C#编译器将
null
值正常地传递给
Add
方法。From(从文档链接)-“如果内容为null,则不添加任何内容。传递集合时,集合中的项可以为null。集合中的null项对树没有影响。”