Windows phone 7 在WindowsPhone7中解析复杂的soap XML

Windows phone 7 在WindowsPhone7中解析复杂的soap XML,windows-phone-7,linq-to-xml,Windows Phone 7,Linq To Xml,我有如下复杂的soapxml <?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/"> <

我有如下复杂的soapxml

<?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>
使用上面的代码,我可以得到消息标签,但我不能得到数组列表,如成功、警告、项目等和类信息。 如何使用LINQ到xml序列化上述xml


提前感谢。

您要查找的元素位于名称空间中,但在查询中您没有使用名称空间。我不确定如何在空名称空间中查找函数或消息。请尝试以下操作:

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);
    }
}
我包含了Xml,因为您提供的Xml已损坏,我必须修复它,以便能够加载到XDocument

以下是我得到的结果:

{ 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 }

您应该仔细阅读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 }