2012-01-30 10 views
0

ステータス XDocument(LINQ to XML)を使用してAzure REST APIを介して生成されたXMLファイルから子孫の値を抽出することは苦労しています。このメソッドを使用してルート要素を抽出する際に問題はありません。子孫を取得することは悪夢であることが証明されています。子孫LINQからXMLを抽出

string status = (string) xmldoc.Descendants(ns + "Status").FirstOrDefault(); 

与えること:あなたが試したものを示していない...しかし、私は、これは細かいことを期待したい

-<HostedService xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure"> 
    <Url>https://management.core.windows.net/subscriptionID/services/hostedservices/hostedservicename</Url> 
    <ServiceName><hostedservicename></ServiceName> 
     -<HostedServiceProperties> 
      <Description/> 
      <Location>South Central US</Location> 
      <Label>EEEEEEEEEEEEEEEEEE</Label> 
     </HostedServiceProperties> 
     -<Deployments> 
      -<Deployment> 
      <Name>DeploymentName</Name> 
      <DeploymentSlot>Production</DeploymentSlot> 
      <PrivateID>55555555555555555555</PrivateID> 
      <Status>Running</Status> 
+0

XMLにLINQを使用したのはなぜ? XMLスキーマがあれば、XMLを自動的に解析するコードを生成できます。 [XMLスキーマ定義ツール](http://msdn.microsoft.com/en-us/library/x6c1kb0s(v = vs.100).aspx) –

答えて

3

:-)助けてください - 以下の略称XMLファイルStatus要素がない場合はnull値です。要件に応じてSingle(),SingleOrDefault()などを使用することができます。

EDIT:ただコメントに展開するには、あなたがこのような他のStatus要素の顔にあなたのコードをより堅牢にすることができます

string status = (string) xmldoc.Descendants(ns + "HostedService") 
           .Descendants(ns + "ServiceName") 
           .Descendants(ns + "Deployments") 
           .Descendants(ns + "Deployment") 
           .Descendants(ns + "Status") 
           .FirstOrDefault(); 
+0

@mynameisneo:このコードスニペットを使用すると、 "Status" Descendantの最初の出現の値。他の "Status"要素が前に出現しないことを確認するために、スキーマを注意深く見てください。 –

+0

信じられない。魅力的な作品! – mynameisneo

+0

@hacktick:hostedservicenameは一意であるため、これは問題ありません。同じ方法を使用して、本番環境のデプロイメントだけを除外します – mynameisneo

関連する問題