我需要显示null或零,而不是显示字符串为空。
Xml回复:
<Items>
<Item>
<ASIN>111</ASIN>
<ItemAttributes>
<Title>xxx</Title>
<ListPrice>
<Currency>USD</Currency>
<FormattedPrice>45.25</FormattedPrice>
</ListPrice>
</ItemAttributes>
<Variation>
<Item>
<ItemAttributes>
<Title>yes</Title>
</ItemAttributes>
</Item>
</Variation>
</Item>
<Item>
<ASIN>222</ASIN>
<ItemAttributes>
<Title>yyy</Title>
</ItemAttributes>
<Variation>
<Item>
<ItemAttributes>
<Title>No</Title>
</ItemAttributes>
</Item>
</Variation>
</Item>
<Items>
这是我的代码。
var Price1 = xd.Descendants(ns + "ListPrice").Select(c => new
{
PPrice = (c.Element(ns + "FormattedPrice") != null) ?
c.Element(ns + "FormattedPrice").Value : **string.Empty**
}).ToList();
如何将String.Empty替换为“Null”或0之类的值。提前感谢。 如果“FormattedPrice”不适用于第二项,那么从Xml响应开始 在列表中显示或为null。
答案 0 :(得分:1)
目前尚不清楚为什么你在这里使用匿名类型,如果使用显式string
转换,你也可以避免使用条件运算符。当然,您可以轻松地将string.Empty
更改为"null"
,并且真的应该可以正常工作 - 如果不是,则会出现其他问题。
无论如何,这里是使用“Null”的简化代码(以及更常规的变量名称):
var prices = xd.Descendants(ns + "ListPrice")
.Select(c => ((string) c.Element(ns + "Price")) ?? "0")
.ToList();
你可能不需要(string) c.Element(ns + "FormattedPrice")
周围的括号 - 我不记得在演员表或空合并运算符之外有什么优先级。
编辑:要处理没有ListPrice
元素的情况,如果您已经处于单项的级别,则可以使用:
var price = (string) item.Element(ns + "ListPrice").Element(ns + "Price") ?? "0";
获取价格列表并以某种方式推断在ListPrice
缺席时插入“0”的位置将要求您找到Items
,例如
var prices = xd.Descendants(ns + "Item")
.Select(item => item.Elements("ListPrice")
.Select(c => (string) c.Element(ns + "Price"))
.FirstOrDefalut() ?? "0")
.ToList();
这只是 的价格,而不是其他商品数据,这将是非常奇怪的。
答案 1 :(得分:0)
这是上述问题的解决方案。
var Title = xd.Descendants(ns + "Items").Elements(ns + "Item").Select(DVDTitle =>DVDTitle.Elements(ns + "ItemAttributes").Select(DVDTitle1 => (string)DVDTitle1.Element(ns + "Title")).FirstOrDefault() ?? "Null").ToList();