如何在XML中搜索嵌套的元素值
本文关键字:嵌套 元素 搜索 XML | 更新日期: 2023-09-27 18:26:00
我浏览了一个xml文件。这是它的一个样本。
<Cproducts>
<ID>id_one</ID>
<Name>name_one</Name>
<Availability>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-06T00:00:00.0000000+00:00</Date>
</Departure>
<Availability>
<ID>id_two</ID>
<Name>name_two</Name>
<Availability>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-07T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-08T00:00:00.0000000+00:00</Date>
</Departure>
<Availability>
</Cproducts>
我像这样直接搜索名字。
var getneededData = rootele.Elements("CruiseProduct")
.Where(l => l.Element("Name").Value == "some value");
则CCD_ 1仅给出其中CCD_。我想浏览一下Date ="some date"
所在的日期。我怎么能像Name
那样直接做到这一点?
只需添加一个或条件,包括date
元素
var anotherDate = DateTime.Now ;
var getneededData = rootele.Elements("CruiseProduct")
.Where(l => l.Element("Name").Value == "some value" || DateTime.ParseExact(l.Descendants("Date").First().Value, "o") == anotherDate);
您的XML
与您的代码不匹配。我假设你的XML
看起来像这个
<?xml version="1.0" encoding="UTF-8" ?>
<Cproducts>
<CruiseProduct>
<ID>id_one</ID>
<Name>name_one</Name>
<Availability>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-06T00:00:00.0000000+00:00</Date>
</Departure>
</Availability>
</CruiseProduct>
<CruiseProduct>
<ID>id_two</ID>
<Name>name_two</Name>
<Availability>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-03T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-07T00:00:00.0000000+00:00</Date>
</Departure>
<Departure>
<Date>2015-12-08T00:00:00.0000000+00:00</Date>
</Departure>
</Availability>
</CruiseProduct>
</Cproducts>
假设这样,你可以找到一个"名称"为的产品
var name_one_product = xDoc.Descendants("CruiseProduct")
.Where(cp => cp.Element("Name").Value == "name_one");
并以"日期"作为
var date = new DateTime(2015, 12, 7);
var product_2015_12_07 = xDoc.Descendants("CruiseProduct")
.Where(cp => cp.Descendants("Date")
.Any(d => DateTime.Parse(d.Value).Date.Equals(date.Date)));
如果你想要这两种条件,那么
var date = new DateTime(2015, 12, 7); //the date on which you want to filter
var product_2015_12_07 = xDoc.Descendants("CruiseProduct")
.Where(cp => cp.Element("Name").Value == "name_one" ||
cp.Descendants("Date")
.Any(d => DateTime.Parse(d.Value).Date.Equals(date.Date)));
使用||
或&&
,以达到您的目的为准。
这就是我所做的,这对我有效…
var getneededData = rootele.Elements("CruiseProduct")
.Where(l => l.Element("Location").Value == "some destination" && l.Element("Types").Element("Type").Value == "some type" && l.Descendants("Date").Any(d=> d.Value.Substring(0,10).Equals("some date")));