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」がアイテム2で使用できない場合、Xml応答から、リストに表示されるかnullになるはずです。

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")。キャストまたはnull合体演算子の優先順位が高いものをすぐに思い出せません。

編集:要素がない状況を処理するために、すでに単一のアイテム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 に答える