使用 LINQ to XML 从子元素创建对象
有没有办法使用 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"< 的名称/值/code> 和
“参数 2”
属于 “Rule_A”
。
我能够得到的最接近的是使用 p.Element(Parameter).Element(Name).Value
,但这不起作用,因为我只会获得第一个 Parameter< /代码> 元素。我还尝试使用
Elements()
,但无法弄清楚如何获取每个元素的值。
Is there any way to use a LINQ to XML to query an XML document like the one below to create new (anonymous or strongly typed) objects from the child elements of a descendant?
Here is my XML document:
<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>
My LINQ query looks like this:
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
After running that query, my Parms()
array would have two objects in it representing the Name/Values of "Parameter 1"
and "Parameter 2"
that fall under "Rule_A"
.
The closest I have been able to get is using the p.Element(Parameter).Element(Name).Value
, but that won't work as I will only get the first Parameter
element. I also tried using Elements()
, but was not able to figure out how I would get the value of each.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以这样做:
You can do it like this:
结果:
Result: