查询嵌套XML中的项

本文关键字:XML 嵌套 查询 | 更新日期: 2023-09-27 17:57:59

我有以下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() };

但这给了我"奥迪"answers"奔驰"的所有车型。我在哪里可以把车的名字传给这里?

查询嵌套XML中的项

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

如果你知道只有一辆车的名字正确,你可以使用Single:

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

或者,如果你不知道是否可能有多种这样的元素(或者没有),并且你对所有名称为奥迪的汽车的所有车型列表感到满意:

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;

使用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();
相关文章: