Есть ли способ использовать LINQ to XML для запроса XML-документа, подобного приведенному ниже, для создания новых (анонимных или строго типизированных) объектов из дочерних элементов потомка?
Вот мой XML-документ:
<Root>
<Rules>
<Rule Name="Rule_A">
<Parameter>
<Name>Parameter 1</Parameter>
<Value>100</Value>
</Parameter>
<Parameter>
<Name>Parameter 2</Parameter>
<Value>200</Value>
<Parameter>
</Rule>
<Rule Name="Rule_B">
<Parameter>
<Name>Parameter 1</Parameter>
<Value>600</Value>
</Parameter>
<Parameter>
<Name>Parameter 2</Parameter>
<Value>300</Value>
<Parameter>
</Rule>
</Rules>
</Root>
Мой запрос LINQ выглядит следующим образом:
Dim RuleName as String = "Rule_A"
Dim parms() = (From p In pXDoc.Descendants("Rule") _
Where p.Attributes("Name").Any And p.Attribute("Name").Value.Equals(RuleName) _
Select New DataParameter With { _
'' Here is where I would like to pull the values of the Parameter
'' elements underneath "Rule_A" and construct an object like below
.Name = LINQ magic to get the value of <Name>
.Value = LINQ magic to get the value of <Value>
}).ToArray
После выполнения этого запроса мой массив Parms()
будет иметь дваобъекты в нем, представляющие Имя / Значения "Parameter 1"
и "Parameter 2"
, которые подпадают под "Rule_A"
.
Самое близкое, что мне удалось получить, это использование p.Element(Parameter).Element(Name).Value
, но это не сработаеттак как я получу только первый Parameter
элемент.Я также пытался использовать Elements()
, но не смог понять, как мне получить значение каждого.