2009-04-23 9 views
3

を解析するためにC#とXDocument/XElementのが私のSuperDuperServiceからサンプル石鹸応答される使用:私は「結果」の末裔または要素をつかむしようとすると、ここでSOAP応答

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <MyResponse xmlns="http://mycrazyservice.com/SuperDuperService"> 
      <Result>32347</Result> 
     </MyResponse> 
    </soap:Body> 
</soap:Envelope> 

何らかの理由で、私はnullを取得。それは名前空間と関係がありますか?誰かがこれから結果を取得するためのソリューションを提供できますか?

答えて

10

あなたはこのような何かをしようとする場合があります:

string myNamespace= "http://mycrazyservice.com/SuperDuperService"; 

var results = from result in yourXml.Descendants(XName.Get("MyResponse", myNamespace)) 
       select result.Element("Result").value 

は、このラップトップ上でVSをお持ちでないので、私は私のコードを再確認することはできませんが、それはにLINQを使用して正しい方向にあなたを指している必要がありますSQL。たぶん、このような

1

:あなたが正しい方向に検索している

IEnumerable<XElement> list = doc.Document.Descendants("Result"); 
if (list.Count() > 0) 
{ 
    // do stuff 
} 
+0

何らかの理由で上記の例のlist.Count()メソッドが私のために存在しないのですか?現在のVS2010 .net 4を使用しています。 –

1

、それは間違いなく、名前空間に関係しています。

以下のコードは、名前空間と要素名の組み合わせで見つかった最初の要素を返します。ブール値をexcpectsリターンで、応答することをテストされたコードとジャスティンの答えを拡張し、メソッド名で始まる結果までの

XDocument doc = XDocument.Load(@"c:\temp\file.xml"); 
XNamespace ns = @"http://mycrazyservice.com/SuperDuperService"; 
XElement el = doc.Elements().DescendantsAndSelf().FirstOrDefault(e => e.Name == ns + "Result"); 
+0

エラーが発生しました - 'e'というローカル変数は、 'e'とは異なる意味を持つため、このスコープでは宣言できません。何かこのソリューションのエラー。どうすれば解決できますか – Sagotharan

+0

これは受け入れられた回答と同じです。 –

3

は(BTW - 驚きであってもXML要素は、それが必要とNSが表示されないと考えられていますそれは構文解析時):