查询嵌套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"奔驰"的所有车型。我在哪里可以把车的名字传给这里?
您只需要一个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();