2

私はLinqを使用してXMLをクエリすることはあまりなく、XMLの経験もあまりありません。私がやりたいのは、この単純なXMLドキュメントをクエリすることです...

<AlarmParameters>
    <Parameter>
        <ParameterName>ConsecutivePoints</ParameterName>
        <Points>30</Points>
        <AllowEdit>true</AllowEdit>
        <Caption>Consecutive Points</Caption>
    </Parameter>

    <Parameter>
        <ParameterName>SigmaCount</ParameterName>
        <Count>1</Count>
        <AllowEdit>true</AllowEdit>
        <Caption>Number of Sigmas</Caption>
    </Parameter>
</AlarmParameters>

...そして、XMLサンプルに示されているプロパティをそれぞれ含む'Parameter'クラスのリストを作成します。LinqPadを使用して、私はこれまでに何とか到達できましたが、これを完了する方法が本当にわかりません。

string xmlFragment = "<AlarmParameters><Parameter><ParameterName>ConsecutivePoints</ParameterName><Points>30</Points><AllowEdit>true</AllowEdit><Caption>Consecutive Points</Caption></Parameter><Parameter><ParameterName>SigmaCount</ParameterName><Count>1</Count><AllowEdit>true</AllowEdit><Caption>Number of Sigmas</Caption></Parameter></AlarmParameters>";

StringReader strReader = new StringReader(xmlFragment);

XDocument xmlDoc = XDocument.Load(strReader);

var result = from parameter in xmlDoc (not sure what Linq to put here next)
4

1 に答える 1

3

MSDNのLINQtoXMLの概要を見ると、いくつかの優れた情報を見つけることができます。Descendants演算子を使用して要素のコレクションを引き出し、演算子を使用しElementてコレクション内の各アイテムのサブプロパティを引き出す方法の1つを次に示します。

var result =
    from parameter in xmlDoc.Descendants("Parameter")
    select new {
        ParameterName = (string) parameter.Element("ParameterName"),
        Points = (int?) parameter.Element("Points") ?? 0,
        Count = (int?) parameter.Element("Count") ?? 0,
        AllowEdit = (bool) parameter.Element("AllowEdit"),
        Caption = (string) parameter.Element("Caption")
    };

select new MyParameterClassNameこれは匿名クラスインスタンスを作成するだけですが、パラメータクラスをに置き換えることができます。

于 2012-04-23T17:36:26.847 に答える