在XML中的条件上使用If,Then,Else

本文关键字:If Then Else XML 条件 | 更新日期: 2023-09-27 18:26:08

只有当ConditionTrue时,有人能帮助如何处理字段中的信息吗?

我试过了,但我想要更优雅的。

<?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>

在XML中的条件上使用If,Then,Else

这应该做到:

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元素选择一组参数,其中ConditionTrue。换句话说,paramSets的类型是IEnumerable<IEnumerable<T>>,其中T是具有NameValue属性的匿名类型。

你可以这样循环:

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
                     }