0

我需要显示 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 响应中,它应该在列表中显示或为空。

4

2 回答 2

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";

获取价格列表并以某种方式推断在不存在时插入“0”ListPrice的位置将需要您找到Items,例如

var prices = xd.Descendants(ns + "Item")
               .Select(item => item.Elements("ListPrice")
                                   .Select(c => (string) c.Element(ns + "Price"))
                                   .FirstOrDefalut() ?? "0")
               .ToList();

不过,这只是价格,而不是其他项目数据,这很奇怪。

于 2012-09-14T11:07:59.403 回答
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();
于 2012-10-06T10:48:06.400 回答