我正在从Web服务接收数据。进来的XML类似于:
<data>
<item>
<code>a</code>
<price>2.89</price>
</item>
<item>
<code>a</code>
<price>2.89</price>
<colour>blue</colour>
</item>
</data>
因此,我们看到一个项目具有Color的附加属性。
好的,这会被转换为List&lt; item&gt;这就是我抓住它的地方。
我需要将此列表转换为XDocument。
使用:
var xml = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("data",
from i in myList
select new XElement("item",
new XElement("price", i.price),
new XElement("code", i.code),
new XElement("colour", i.colour))));
(我从记忆中输入了这个,所以借口拼写)
这里错误,因为i.colour为空。
我该如何应对?
提前致谢
格里夫
答案 0 :(得分:3)
在尝试访问之前,您需要检查i.colour是否为null
。
您可以使用null-coalescing运算符整齐地执行此操作,如:
new XElement("colour", i.colour ?? ""))));
如果i.colour
为null
,则假设您想要一个空字符串作为值。
<强>更新强>
根据您在下面的评论,如果您不希望在i.colour
为null时添加该元素,则将其创建为XDocument
实例,并根据需要添加。
var xml = new XDocument(...);
if(i.colour != null)
{
xml.Add(new XElement(...));
}
}
答案 1 :(得分:2)
为避免在XElement
为空时添加新的colour
,您可以使用ternary operator并根据需要返回null或新的XElement
:
var xml = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("data",
from i in myList
select new XElement("item",
new XElement("price", i.price),
new XElement("code", i.code),
i.colour == null ?
null : new XElement("colour", i.colour)
)));