1

XML ドキュメントからリストを取得しようとしています。2 つの異なるセクションから 2 つのリストを作成し、ドキュメント内の Id 値を一致させる必要があります。ここに私のXMLファイルがあります

 <?xml version="1.0" encoding="utf-8"?>
<Root>
    <VehicleCollection>
        <ModelInfo>
            <Vehicle>
                <Id>101</Id>
                <Color>Red</Color>
                <Year>1987</Year>
                <Make>Saturn</Make>
                <Manufacturer>General Motors</Manufacturer>
            </Vehicle>
            <Vehicle>
                <Id>100</Id>
                <Color>Blue</Color>
                <Year>1998</Year>
                <Make>Saturn</Make>
                <Manufacturer>General Motors</Manufacturer>
            </Vehicle>
        </ModelInfo>
        <PriceInfo>
            <Vehicle>
                <Id>101</Id>
                <OriginalCost>11000</OriginalCost>
                <MarketValue>1200</MarketValue>
            </Vehicle>
            <Vehicle>
                <Id>100</Id>
                <OriginalCost>11000</OriginalCost>
                <MarketValue>3100</MarketValue>
            </Vehicle>
        </PriceInfo>
    </VehicleCollection>
</Root>

PriceInfo セクションのアイテム数が ModelInfo セクションのアイテム数と一致することを確認したいと考えています。以下のコードを使用してリストを取得しています。

  private static void PrintVehicleInfo(string fileName)
    {
        if (fileName != null)
        {
            var xDoc = XDocument.Load(fileName);
            var vehicle = xDoc.Descendants("Vehicle").ToList(); //Culprit
            foreach (var v in vehicle)
            {
                Console.WriteLine(v.Element("Id"));
            }
        }
    }

XML ドキュメントから 2 つの個別のリストを作成するにはどうすればよいですか? ID 値が繰り返される単一のリストを取得します。コードにセクション名を含めようとすると、実行時例外がスローされます。

 var vehicle = xDoc.Descendants("ModelInfo/Vehicle").ToList();
OR
 var vehicle = xDoc.Descendants("ModelInfo//Vehicle").ToList();
4

1 に答える 1

0

もう少し掘り下げると、解決策にたどり着きました。

var xDoc = XDocument.Load(fileName);
            XElement vehicleCollection = xDoc.Element("Root").Element("VehicleCollection").Element("ModelInfo");
            var vehicle = vehicleCollection.Descendants("Vehicle").ToList();
            foreach (var v in vehicle)
            {
                Console.WriteLine(v.Element("Id"));
            }
            vehicleCollection = xDoc.Element("Root").Element("VehicleCollection").Element("PriceInfo");
            vehicle = vehicleCollection.Descendants("Vehicle").ToList();
            foreach (var v in vehicle)
            {
                Console.WriteLine(v.Element("Id"));
            }
于 2013-07-11T17:57:11.883 に答える