根据输入向XML元素添加属性

时间:2011-01-20 00:35:40

标签: xml linq

如何在LINQ查询中检查属性的值是否为空。如果它不为null,那么将属性添加到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())
                   ) )

1 个答案:

答案 0 :(得分:2)

您只需检查null即可。 XElement接受一个params数组项,null是可以接受的,基本上会被丢弃。因此,请检查您的值是否为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" />