0

我有以下 XML:

<Vehicle>
  <Car>
    <Name>Audi</Name>
    <ModelList>
      <Model>A3</Model>
      <Model>A5</Model>
      <Model>A7</Model>
    </ModelList>
  </Car>
  <Car>
    <Name>Benz</Name>
    <ModelList>
      <Model>C Class</Model>
      <Model>E Class</Model>
      <Model>S Class</Model>
    </ModelList>
  </Car>
</Vehicle>

从中,我如何获得汽车名称“奥迪”的不同型号?

我尝试了以下方法:

var h = from c in load.Descendants("Vehicle") 
        select new { model = c.Descendants("Car").Elements("ModelList").ToArray() };

但这给了我“奥迪”和“奔驰”的所有型号。我在哪里可以在这里传递汽车的名称?

4

2 回答 2

3

您只需要一个Where子句或First(或类似的东西)来执行过滤。

如果您知道只有一辆车名称正确,您可以使用Single

var models = load.Descendants("Car")
                 .Single(x => (string) x.Element("Name") == "Audi")
                 .Element("ModelList")
                 .Elements("Model")
                 .Select(x => (string) x);

或者,如果您不知道是否可能有多个此类元素(或没有),并且您对所有名称为 Audi 的汽车的所有型号列表感到满意:

var models = load.Descendants("Car")
                 .Where(x => (string) x.Element("Name") == "Audi")
                 .SelectMany(x => x.Element("ModelList").Elements("Model"))
                 .Select(x => (string) x);

查询表达式中的后一个版本:

var models = from x in load.Descendants("Car")
             where (string) x.Element("Name") == "Audi"
             from model in x.Element("ModelList").Elements("Model")
             select (string) model;
于 2013-02-06T07:07:12.720 回答
1

使用 Linq 到 Sql:

XDocument doc = XDocument.Load("XMLFilePath");
var selectors3 = (from elements in doc.Element("Vehicle").Elements("Car")
                  where elements.Element("Name").Value == "Audi"
                  from items in elements.Element("ModelList").Elements("Model")
                  select items.Value).ToList();
于 2013-02-06T07:40:07.683 回答