Разбор сложного мыла XML в windows phone 7 - PullRequest
0 голосов
/ 24 января 2012

У меня сложное мыло XML, как показано ниже.

<?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
                });

, используя приведенный выше код, я могу получить тег сообщения, но не могу получить списки массивов (например, Успех, предупреждения, Элементы и т. Д.) И класс (например,Информация). Как я могу сериализовать вышеупомянутый xml, используя LINQ to XML.

Заранее спасибо.

1 Ответ

0 голосов
/ 25 января 2012

Элементы, которые вы ищете, находятся в пространстве имен 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);
    }
}

(я включил 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...