【问题标题】:Add attributes to XML element based on the input根据输入向 XML 元素添加属性
【发布时间】:2011-01-20 00:35:39
【问题描述】:

如何在 LINQ 查询中检查属性的值是否不为空。如果它不为空,那么将属性添加到 XML 元素?

for ex : First = AAA, Last = BBB, Suffix = Jr. 然后 我的 XML 应该是这样的(因为我没有为 Prefix 传递任何值并键入它们不应该出现在 XML 中)

<Subject>
   </Name First= "AAA" Last ="BBB" Suffix="Jr">
</Subject>

谢谢 BB

from i in DriverNames
  select new XElement(Subject,
             new XElement(Name,
                 new XAttribute("type", i.nameType),
        new XAttribute(First, i.First.ToString().Trim().ToUpper()),
        new XAttribute(last, i.Last.ToString().Trim().ToUpper()),
        new XAttribute(Prefix, i.Prefix.ToString().Trim().ToUpper()),
        new XAttribute(Suffix, i.Suffix.ToString().Trim().ToUpper())
                   ) )

【问题讨论】:

    标签: xml linq


    【解决方案1】:

    您可以简单地检查 null。 XElement 接受一个 params 项目数组,空值是可以接受的并且基本上会被丢弃。因此,请检查您的值是否为 null 并继续。一个例子:

    class Foo
    {
        public string Bar { get; set; }
        public string Baz { get; set; }
    }
    

    ...

    List<Foo> foos = new List<Foo>();
    foos.Add(new Foo() { Bar = "Dog" });
    foos.Add(new Foo() { Baz = "Cat" });
    
    var query = from foo in foos
                select new XElement("Foo",
                    !string.IsNullOrEmpty(foo.Bar) ? new XAttribute("Bar", foo.Bar) : null,
                    !string.IsNullOrEmpty(foo.Bar) ? new XAttribute("Baz", foo.Baz) : null);
    

    生成的 XML,您会看到它按照您的意愿呈现每个元素。

    <Foo Bar="Dog" />
    <Foo Baz="Cat" />
    

    【讨论】:

    • 谢谢安东尼,这并没有解决我的问题。现在使用您的代码 if : foos.Add(new Foo() {Bar = ""});那么生成的 XML 是 。但我不希望 显示在生成的 XML 中。
    • @BumbleBee,考虑将foo.Bar != null 替换为!string.IsNullOrEmpty(foo.Bar)foo.Baz 也是如此)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多