1

我正在尝试从 XML 文档中获取列表。我需要从两个不同的部分创建两个列表,然后匹配文档中的 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 文档创建两个单独的列表?我得到一个列表,其中重复了 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 回答