0

私はこのようなXMLファイルを持っています...

<return>
  <availableOptions>
    <premiums>
      <item>
        <productCode>Poroduct Code 1</productCode>
        <productDescription>Product Desc 1</productDescription>
        <coverageCode>Coverage Code 1</coverageCode>
        <coverageDescription>Coverage Description 1</coverageDescription>
      </item>
      <item>
        <productCode>Poroduct Code 2</productCode>
        <productDescription>Product Desc 2</productDescription>
        <coverageCode>Coverage Code 2</coverageCode>
        <coverageDescription>Coverage Description 2</coverageDescription>
        <coverageOptions>
          <item>
            <label>label here</label>
            <value>true</value>
            <key>key</key>
          </item>
          <item>
            <label>label here</label>
            <value>true</value>
            <key>key</key>
          </item>
        </coverageOptions>
        <surcharges/>
      </item>
      <item>
         etc...
      </item>
      <item>
         etc...
      </item>
    </premiums>
  </availableOptions>
</return>

私の目標は次のとおりです。すべての一意のカバレッジコードを見つける

次の LINQ コードがあります。

XDocument xdoc = XDocument.Load("data.xml");

var linq = from item in xdoc.Descendants("premiums").Descendants("item")
            select new
            {
                ProductCode = item.Element("productCode").Value,
                CoverageCode = item.Element("coverageCode").Value
            };

foreach (var node in linq)
{
    Console.WriteLine("Product Code: " + node.ProductCode + ", Coverage Code: " + node.CoverageCode);
}

最初<item>は正しく出力されます。ただし、2 番目になると、ノードでandを探しているため<item>、エラーがスロー されますが、何もありません。 Object reference not set to an instance of an objectproductCodecoverageCodecoverageOptions/item

私はそれをそこに見せたくありません

<item>代わりにLINQを最初のものだけに集中させるにはどうすればよいですか? また、productCode と coverageCode を区別したいと思います。この XML ファイルに<item>は、同じ productCode ノードと coverageCode ノードを持つものが複数あります。

事前にどうもありがとうございました!

4

1 に答える 1