1

我正在 VB 中使用 LINQ to XML(尽管 C# 中的答案也很棒)。首先,我的代码有效,所以这并不重要。但是,我不禁想到,我对条件逻辑所做的事情应该已经可以使用 LINQ 查询本身来实现。

这是我所拥有的:

        'Get the Description elements in the ResultData section where the value is "Op Code"
        Dim opCodes As List(Of XElement) = (From c In xdoc.Descendants("ResultData").Descendants("Description")
                 Where c.Value = "Op Code"
                 Select c).ToList()

        If opCodes.Count > 0 Then
            'Get the sibling XElement of the first "Description" XElement (there should be only one) by using the parent
            sOperator = Convert.ToString(((From c In opCodes
                     Select c).FirstOrDefault().Parent).<Value>.Value)
        Else
            sOperator = "Not Available"
        End If

请不要对我定位兄弟节点的方法过于挑剔——XML 文件是由第三方测试设备生成的,这是获取我需要的值的唯一通用方法。我真正在这里寻找的是处理 If 块的更好方法。

对此提出的任何想法将不胜感激。

4

1 回答 1

1

听起来你想要(C#):

string operator = xdoc.Descendants("ResultData")
                      .Descendants("Description")
                      .Where(x => x.Value == "Op Code")
                      .Select(x => x.Parent.Element("Value").Value)
                      .FirstOrDefault() ?? "Not available";

假设我已经正确理解了您,您只是想在兄弟“Value”元素中获取文本。

认为VB 中不存在 null-coalescing (??) 运算符,但是您可以将所有内容都带到FirstOrDefault,然后只需进行“如果什么都没有,请将其设置为不可用”检查。

于 2012-04-27T14:44:32.163 回答