[英]C# XML Linq on multiple tags of same name
我在XML文件中有一些項目。 例如。 多個項目,例如同一文件中的以下項目。 我想搜索FluidTypes匹配特定字符串的所有項目條目。
<?xml version="1.0" encoding="utf-8"?>
<data>
<Project ID="P-2014-000037">
<Name>FDP001_Bakken</Name>
<Manager>shell</Manager>
<Area>NAM</Area>
<Field>Bakken</Field>
<Type>Time and Material External</Type>
<Country>USA</Country>
<Value>3.5</Value>
<Geomarket>NAM</Geomarket>
<FormationTypes>Carbonate</FormationTypes>
<FormationTypes>Coal</FormationTypes>
<FormationTypes>Fractures</FormationTypes>
<FormationTypes>Sandstone</FormationTypes>
<FluidTypes>Gas Cond</FluidTypes>
<FluidTypes>Heavy Oil</FluidTypes>
<DriveMechanisms>Compaction</DriveMechanisms>
<DriveMechanisms>Aquifer</DriveMechanisms>
<EORProcesses>CO2</EORProcesses>
<EORProcesses>CSS</EORProcesses>
</Project>
</data>
我正在使用以下代碼搜索Geomarket匹配項:
IEnumerable<XElement> values1 = from el1 in root.Elements("Project").
Where(r => regEx1.IsMatch(r.Element("Geomarket").Value))
select el1;
當我將相同的流體類型(具有多個元素)使用時:
IEnumerable<XElement> values1 = from el1 in root.Elements("Project").
Where(r => regEx1.IsMatch(r.Element("FluidTypes").Value))
select el1;
它僅檢查與名稱為Fluid Types的第一個元素是否匹配,而不檢查與所有Fluid Types元素是否匹配。 結果,只有Gas Cond匹配此項目,而Heavy Oil沒有。
如何在所有流體類型搜索中進行查詢?
將Where
子句與嵌套搜索一起使用:
var projects = root
.Elements("Project")
.Where(el => el.Elements("FluidTypes").Where(el2 => regEx1.IsMatch(el2.Value)).Any());
這將返回所有名為"Project"
元素,以及至少一個嵌套的名為"FluidTypes"
的元素,其Value
與您的正則表達式匹配。
或者,使用嵌套的Any()
:
var projects = root
.Elements("Project")
.Where(el => el.Elements("FluidTypes").Any(el2 => regEx1.IsMatch(el2.Value)));
嘗試
IEnumerable<XElement> values1 = from el1 in root.Elements("Project").Elements("FluidTypes")
.Where(r => regEx1.IsMatch(r.Value))
Select el1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.