在XML中使用If,Then,Else on Condition

时间:2014-10-10 15:10:26

标签: c# xml vb.net if-statement

只有当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>

2 个答案:

答案 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")
                                 }));

这将为EventCondition True的每个paramSets元素选择一组参数。换句话说,IEnumerable<IEnumerable<T>>的类型为T,其中Name是具有Valueforeach (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
                     }