gpt4 book ai didi

c# - 遵循 LINQ-to-XML 哲学,从生成的 XML 文档中省略可选属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:36 24 4
gpt4 key购买 nike

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

XElement element = new XElement("myelement",
new XAttribute("property1", value1),
new XAttribute("property2", value2));
if (!string.IsNullOrEmpty(rareValue1))
{
element.Add(new XAttribute("rareProperty1", rareValue1));
}
if (!string.IsNullOrEmpty(rareValue2))
{
element.Add(new XAttribute("rareProperty2", rareValue2));
}
if (!string.IsNullOrEmpty(rareValue3))
{
element.Add(new XAttribute("rareProperty3", rareValue3));
}

但实际上,if 想省略“if”语句,因为它们不是很优雅,而且它们与 LINQ to XML 哲学相矛盾,在 LINQ to XML 哲学中,您可以按照 Creating Trees in XML 中所述通过嵌套轻松创建 XML 树。 .所以,我想做这样的事情:

XElement element = new XElement("myelement",
new XAttribute("property1", value1),
new XAttribute("property2", value2),
new XAttribute("rareProperty1", string.IsNullOrEmpty(rareValue1) ? Flag.Omit : rareValue1),
new XAttribute("rareProperty2", string.IsNullOrEmpty(rareValue2) ? Flag.Omit : rareValue1),
new XAttribute("rareProperty3", string.IsNullOrEmpty(rareValue3) ? Flag.Omit : rareValue1),
);

即C# 源代码在其构造函数中包含 myelement 的所有子属性。 Flag.Omit 是指示 LINQ-to-XML 不要生成 XML 属性的某种方式。

这是否可以通过标准 LINQ to XML 或一些通用实用函数实现?

最佳答案

添加子节点的各种方法都忽略 null 值 - 所以您只需要一个辅助方法:

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

然后:

XElement element = new XElement("myelement",
new XAttribute("property1", value1),
new XAttribute("property2", value2),
AttributeOrNull("rareProperty1", rareValue1),
AttributeOrNull("rareProperty2", rareValue2),
AttributeOrNull("rareProperty3", rareValue3)
);

关于c# - 遵循 LINQ-to-XML 哲学,从生成的 XML 文档中省略可选属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com