只有当Condition
为True
时,是否有人可以帮助您了解如何处理字段中的信息?
我已经尝试了每一个,如果那样,但我想要一些更优雅的东西。
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<Events>
<Event Id="1">
<Condition>True</Condition>
<Fields>
<Parameter Name="thisOne" Value="1234" />
<Parameter Name="notthisOne" Value="xyz" />
<Parameter Name="thisoneagain" Value="5678" />
<Parameter Name="notthisoneAgain" Value="abc" />
</Fields>
</Event>
<Event Id="2">
<Condition>False</Condition>
<Fields>
<Parameter Name="thisOne" Value="1234" />
<Parameter Name="notthisOne" Value="xyz" />
<Parameter Name="thisoneagain" Value="5678" />
<Parameter Name="notthisoneAgain" Value="abc" />
</Fields>
</Event>
</Events>
</root>
答案 0 :(得分:1)
这应该这样做:
var paramSets = e.Descendants("Event")
.Where(ev => (string)ev.Element("Condition") == "True")
.Select(ev => ev.Descendants("Parameter")
.Select(p => new
{
Name = (string)p.Attribute("Name"),
Value = (string)p.Attribute("Value")
}));
这将为Event
为Condition
True
的每个paramSets
元素选择一组参数。换句话说,IEnumerable<IEnumerable<T>>
的类型为T
,其中Name
是具有Value
和foreach (var event in paramSets)
{
foreach (var parameter in event)
{
// Do something with the parameter
Console.WriteLine("Name: {0}, Value: {1}", parameter.Name, parameter.Value);
}
}
属性的匿名类型。
你可以这样循环:
{{1}}
答案 1 :(得分:0)
使用Where
子句限制LINQ to XML中的数据集。
您可以通过向下钻取元素并调用.Value
这将加载所有每个参数的所有名称和值,这些参数是具有值为True的条件元素的事件的一部分:
Dim xdoc As XDocument = XDocument.Parse(str)
Dim parameters = From e In xdoc.Root.Elements("Events").Elements("Event")
From p In e.Elements("Fields").Elements("Parameter")
Where e.Element("Condition").Value = "True"
Select New With {
.Name = p.Attribute("Name").Value,
.Value = p.Attribute("Value").Value
}