2017-08-17 14 views
0

おはよう。 誰かが私を助けてくれることを願っています。私は多くの運がなければこれを理解しようと努力しました。私は特定の値を取得しようとしているXML SOAP文書を持っています。以下はその文書の抜粋です。前の要素に基づくXML要素の読み取り

<Devices isOnline="false"> 
     <deviceId> 
      <Number>1</Number> 
      <Id>11111</Id> 
     </deviceId> 
     <lastUploadDateTime>2017-07-27</lastUploadDateTime> 
     <Parameters> 
      <TempId>22222</TempId> 
      <MappedId>3333</MappedId> 
     </Parameters> 
</Devices> 

私は、一致を見つけた場合、私はその後、pararametersに移動し、TempIDの値を取得する必要があると要素をMappedID、特定のIDを確認するためのdeviceIDで最初に検索する必要があります。

これまでのところ、私はDevices要素をループする以下のコードを持っていますが、deviceIdの下で特定のIDをチェックし、Parametersの下のTempIdとMappedIdの値を取得する方法がわかりません。

XDocument doc = XDocument.Parse(xml); 
XNamespace ns = "http://"; 
IEnumerable<XElement> responses = doc.Descendants("Devices"); 


foreach (XElement response in responses) 
{ 

} 

ご協力いただければ幸いです。私は見つけた多くの例を試しましたが、私の正確な詳細を得ることができるものはありません。

答えて

0

xmlをトラバースする方法はたくさんあります。次のように

一つの方法は次のとおりです。

foreach (XElement response in responses) 
{ 
    var tempIdElement = 
    response.Descendants("Parameters").Elements("TempId").FirstOrDefault(); 

    string value = tempIdElement.Value; 
} 

あなたが.Descendants()を呼び出すとき、それはあなたにこの下のすべての子要素を与えるだろう。したがって、上記のコードでは、Parametersを取得し、パラメータの下にはTempIdがあります。

Linqを試してみると、さまざまな方法でこの結果を得ることができます。

Xmlに要素がない場合のシナリオを処理するために、必要なnull条件チェックも追加する必要があります。

+0

PastorとBrunoをありがとうございました。 あなたは私を大いに助けてくれました。私はあなたがこれを手伝ってくれた時間を本当に感謝しています。期待どおりに動作しません。 もう一度ありがとうございます。 –

1

firstable私はこのエンティティのクラスを宣言してからXMLを照会します:

public class DevicesParam 
{ 
    public DevicesParam() { } 

    public long TempId { get; set; } 
    public long MappedId { get; set; } 
} 

そして、このようなXMLクエリにLINQを記述します。

var parameters = (from p in responses.Descendants("Parameters") select new 
DevicesParam {                  
    TempId = p.TempId ?? 0 ,                     
    MappedId = p.MappedId ?? 0                      
}).SingleOrDefault(); 

ここではあなたがのためにlinkを持っていますC#でLINQ to XMLの詳細を読む

関連する問題