2012-01-24 10 views
0

私は以下のような複雑なSOAPを持っています。Windowsの電話で複雑なSOAPを解析する7

<?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Header> 
     <MessageHeader> 
      <From>   
      <Type>string</Type> 
      </d3p1:From> 
      <d3p1:To>   
      <Role>string</Role> 
      </d3p1:To>  
     </MessageHeader> 
     <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/sxvt">  
      <StrongToken>string</StrongToken> 
     </Security> 
     </soap:Header> 
     <soap:Body> 
     <FunctionResponse xmlns="http://www.yyy.com/webservices"> 
      <FunctionRS TimeStamp="dateTime"> 
      <Message>string<Message> 
      <Success> 
       <SuccessMessage>string</SuccessMessage> 
      </Success> 
      <Warnings> 
       <Warning Type="string" Text="string" /> 
       <Warning Type="string" Text="string" /> 
      </Warnings> 
      <Errors> 
       <Error Type="string" Text="string" /> 
       <Error Type="string" Text="string" /> 
      </Errors> 
      <Items> 
       <Item SequenceNo="Int" "> 
       <SamplePrice> 
        <Prices>   
         <Price> 
          <ToatlPrice> 
           <ItemNo>Int </ItemNo> 
           <ItemPrice>Int </ItemPrice> 
          </ToatlPrice> 
         </Price> 
        </Prices> 
       </SamplePrice > 
       </Item> 
      <Item SequenceNo="Int" "> 
       <SamplePrice> 
        <Prices>   
         <Price> 
          <ToatlPrice> 
           <ItemNo>Int </ItemNo> 
           <ItemPrice>Int </ItemPrice> 
          </ToatlPrice> 
         </Price> 
        </Prices> 
       </SamplePrice > 
       </Item> 
      </Items>   
      <Info> 
       <CurrencyCode> 
        <string>string</string> 
        <string>string</string> 
       </CurrencyCode> 
      </Infor> 
      </FunctionRS> 
     </FunctionResponse> 
     </soap:Body> 
    </soap:Envelope> 

ここでは、FunctionRSタグの結果が必要です。私はFunctionRSタグのクラスを作成しました。 私はFunctionRSクラスを作成しました。

var result = resultNewDataSet.Descendants("FunctionRS").Select(t => new FunctionRS 
       { 
        Message = t.Descendants("Message").First().Value, 
        //Success = t.Descendants("Success").First().Value 
       }); 

私はメッセージタグを取得することができています上記のコードを使用して、私は、配列のリストを取得することはできませんよと(情報のような)クラス(成功、警告、アイテム、などなど)。 LINQ to XMLを使用して上記のxmlをシリアル化する方法はありますか。

ありがとうございます。

+0

あなたはXML名前空間についてまで読んでください:ここでは

は、私が得た結果です。 –

答えて

0

要素はhttp://www.yyy.com/webservices名前空間にありますが、クエリでは名前空間を使用していません。私はあなたが空の名前空間でそれらを探しているときに、どのようにしてFunctionRSかMessageが見つかるかわかりません。次のことを試してみてください。

var resultNewDataSet = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?> 
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" 
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" 
xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:d3p1=""unknownnamespace""> 
    <soap:Header> 
    <MessageHeader> 
     <d3p1:From>   
     <Type>string</Type> 
     </d3p1:From> 
     <d3p1:To>   
     <Role>string</Role> 
     </d3p1:To>  
    </MessageHeader> 
    <Security xmlns=""http://schemas.xmlsoap.org/ws/2002/12/sxvt"">  
     <StrongToken>string</StrongToken> 
    </Security> 
    </soap:Header> 
    <soap:Body> 
    <FunctionResponse xmlns=""http://www.yyy.com/webservices""> 
     <FunctionRS TimeStamp=""dateTime""> 
     <Message>string</Message> 
     <Success> 
      <SuccessMessage>string</SuccessMessage> 
     </Success> 
     <Warnings> 
      <Warning Type=""string"" Text=""string"" /> 
      <Warning Type=""string"" Text=""string"" /> 
     </Warnings> 
     <Errors> 
      <Error Type=""string"" Text=""string"" /> 
      <Error Type=""string"" Text=""string"" /> 
     </Errors> 
     <Items> 
      <Item SequenceNo=""Int""> 
      <SamplePrice> 
       <Prices>   
        <Price> 
         <ToatlPrice> 
          <ItemNo>Int </ItemNo> 
          <ItemPrice>Int </ItemPrice> 
         </ToatlPrice> 
        </Price> 
       </Prices> 
      </SamplePrice > 
      </Item> 
     <Item SequenceNo=""Int""> 
      <SamplePrice> 
       <Prices>   
        <Price> 
         <ToatlPrice> 
          <ItemNo>Int </ItemNo> 
          <ItemPrice>Int </ItemPrice> 
         </ToatlPrice> 
        </Price> 
       </Prices> 
      </SamplePrice > 
      </Item> 
     </Items>   
     <Info> 
      <CurrencyCode> 
       <string>string</string> 
       <string>string</string> 
      </CurrencyCode> 
     </Info> 
     </FunctionRS> 
    </FunctionResponse> 
    </soap:Body> 
</soap:Envelope>"); 

XNamespace webServicesNs = "http://www.yyy.com/webservices"; 

var result = resultNewDataSet 
    .Descendants(webServicesNs + "FunctionRS") 
    .Select(t => new 
    { 
     Message = (string)t.Descendants(webServicesNs + "Message").First(), 
     Success = (string)t.Descendants(webServicesNs + "Success").First(), 
     Warnings = t 
      .Element(webServicesNs + "Warnings") 
      .Elements(webServicesNs + "Warning") 
      .Select(w => new 
      { 
       @Type = (string)w.Attribute("Type"), 
       @Text = (string)w.Attribute("Text") 
      }) 
}); 

foreach (var r in result) 
{ 
    Console.WriteLine(r); 
    foreach (var w in r.Warnings) 
    { 
     Console.WriteLine(w); 
    } 
} 

(あなたが提供される一つが壊れて、私はXDocumentにロードすることを可能にするためにそれを修正しなければならなかったので、私は、XMLを含みます)。

{ Message = string, Success = string, Warnings = System.Linq.Enumerable+WhereSel 
ectEnumerableIterator`2[System.Xml.Linq.XElement,<>f__AnonymousType0`2[System.St 
ring,System.String]] } 
{ Type = string, Text = string } 
{ Type = string, Text = string } 
関連する問題