在XML中的条件上使用If,Then,Else
本文关键字:If Then Else XML 条件 | 更新日期: 2023-09-27 18:26:08
只有当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>
这应该做到:
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);
}
}
使用Where
子句将LINQ中的数据集限制为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
}