質問

次のようなXMLファイルを読んでいます:

<?xml version="1.0" encoding="utf-8"?>
<VehicleList>
 <Vehicle>
  <Item>
   <Name>F-150</Name>
   <Maker>Ford</Maker>
   <Color>Black</Color>
   <Price>30000</Price>
  </Item>
  <ItemSpecific>
   <NameValueList>
    <Name>Mileage</Name>
    <Value>56000</Value>
   </NameValueList>
   <NameValueList>
    <Name>Year</Name>
    <Value>2003</Value>
   </NameValueList>
  </ItemSpecific>
 </Vehicle>
 <!-- more Vehicle nodes here -->
</Vehicles>

これは、eBay Webサービスから返されたサンプルデータです。そのため、構造を焼き付けないでください。

とにかく、このようなコードを使用してxmlを読み取り、すべてのVehiclesをList(of Vehicle)オブジェクトに配置します。

   Dim vehicles = From v in doc...<Vehicle> _
   Let mile = (From x In v.<ItemSpecific>.<NameValueList> Where x.<Name>.Value = "Mileage" Select x.<Value>.Value).Single _
                   Let year = (From z In v.<ItemSpecific>.<NameValueList> Where z.<Name>.Value = "Year" Select z.<Value>.Value).Single _
                   Select New Vehicle With {.Name = v.<Item>.<Name>.Value, .Maker = v.<Item>.<Maker>.Value, .Color = v.<Item>.<Color>.Value, .Mileage = mile, .Year = year}

結果の List(Of Vehicle)は、データがレンダリングされるASP.NET ListView コントロールにバインドされます。必要なノードがすべて存在する場合、すべてがうまくいきます 。たとえば、マイレージノードは条件付きであり、場合によっては存在しません。ノードが存在しないときはいつでも&quot; Sequence contains no elements &quot;エラー。

物事を適切に機能させるために、私が知っているすべてを試しました。 XElementが存在するかどうかをテストする方法はありますか?

役に立ちましたか?

解決

ノードが存在しないときに何をしたいかによって異なります。たとえば、Nothingが受け入れられる場合、.Singleから.SingleOrDefaultに切り替えることができます。後者は、空のシーケンスの場合はNothingを返し、例外をスローしません。

Dim vehicles = From v in doc...<Vehicle> _
               Let mile = (From x In v.<ItemSpecific>.<NameValueList> Where x.<Name>.Value = "Mileage" Select x.<Value>.Value).SingleOrDefault _
               Let year = (From z In v.<ItemSpecific>.<NameValueList> Where z.<Name>.Value = "Year" Select z.<Value>.Value).SingleOrDefault _
               Select New Vehicle With {.Name = v.<Item>.<Name>.Value, .Maker = v.<Item>.<Maker>.Value, .Color = v.<Item>.<Color>.Value, .Mileage = mile, .Year = year}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top