1

私はVBでLINQtoXMLを使用しています(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合体(??)演算子は存在しないと思いFirstOrDefaultますが、すべてを取得して、「何もない場合は「使用不可」に設定する」チェックを入れることができます。

于 2012-04-27T14:44:32.163 に答える