2012-04-23 9 views
2

XMLを照会するのにLinqをよく使用することはありません。XMLに関する豊富な経験はありません。私は何をしたいの...この簡単なXML文書を照会することですLinqを使用して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のサンプルに示すプロパティを含む各のリストを生成します。 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) 

答えて

3

LINQ to XML overviewには、MSDNのよくある情報があります。ここでは、要素のコレクションを引き出すためにDescendants演算子を使用して行うことができる一つの方法、およびコレクション内の各アイテムのサブプロパティを引き出すElementオペレータです:

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と置き換えることができます。

+0

これはほぼ完璧です。このクエリを実行すると、クラスプロパティの値に要素名に埋め込まれた値が含まれていることがわかりました(たとえば、)。要素名を取り除き、値を取得する方法はありますか? – Hosea146

+1

ああ、 'Element(" .. ")。Value'。 – mellamokb

+1

あなたは私の一日を作ったよ! – Hosea146

関連する問題