2013-12-19 20 views
0

Извините за простоты, но это один ускользает меня Хир является запрос XML мыло:XML Корневой элемент отсутствует

<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> 
    <TarifResponse xmlns="http://www.april-technologies.com"> 
     <TarifResult> 
     <Status> 
      <Summary> 
      <ResponseTechnicalLabel /> 
      <ResponseTechnicalData>OK</ResponseTechnicalData> 
      </Summary> 
     </Status> 
     <BusinessData> 
      <IdentifiantProjet>1296483</IdentifiantProjet> 
      <Proposition> 
      <PropositionOutput> 
       <Ordre>1</Ordre> 
       <Produit>SanteEssentiel</Produit> 
       <Garantie> 
       <GarantieOutput> 
        <Libelle>Niveau 1</Libelle> 
        <CotisationMensuelle>5998</CotisationMensuelle> 
       </GarantieOutput> 
       </Garantie> 
       <ValiditeTarif> 
       <DateDebut>01/01/2014</DateDebut> 
       <DateFin>31/12/2014</DateFin> 
       </ValiditeTarif> 
       <OptionProduit /> 
      </PropositionOutput> 

      </Proposition> 
     </BusinessData> 
     </TarifResult> 
    </TarifResponse> 
    </soap:Body> 
</soap:Envelope> 

и код С #

XDocument docxx = XDocument.Parse(Session["xmlrs" + z + ""].ToString()); 
      //This now holds the set of all elements named field 

      try 
      { 
       XNamespace foobar = "http://www.april-technologies.com"; 
       var urlList = docxx.Descendants(foobar + "CotisationMensuelle") 
             .Select(x => (string)x) 
             .ToList(); 
       Console.WriteLine(urlList); 




       rpMyRepeater1.DataSource = urlList; 
       rpMyRepeater1.DataBind(); 
      } 
      catch(Exception ex) {} 

??? hou я могу получить данные «CotisationMensuelle» ??? Я получаю нулевые данные, hou ik может решить эту проблему?

+0

«CotisationMensuelle» находится внутри GarantieOutput ... Так что-то вроде : Root -> TarifResult -> BusinessData -> Предложение -> Garantie -> GarantieOutput -> CotisationMensualle – Crasher

+0

Вы можете использовать XPath 2: http://www.w3schools.com/xpath/ ... и написать что-то вроде: XmlDocument xmlDoc = новый Xm lDocument(); Загрузить ... xmlDoc.SelectSingleNode ("//CotisationMensuelle").Value; или что-то вроде этого =) – Crasher

ответ

2

вы можете использовать Descendants метод, как показано ниже

XNamespace foobar = "http://www.april-technologies.com"; 
var urlList = docxx.Descendants(foobar + "CotisationMensuelle") 
         .Select(x => (string)x) 
         .ToList(); 
Console.WriteLine(urlList.Count); 

, если вы пытаетесь использовать Element или Elements вы должны пройти полную иерархии

XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/"; 
XNamespace ns1 = "http://www.april-technologies.com"; 

var CotisationMensuelle=(string)xml.Root 
         .Element(soapenv + "Body") 
         .Element(ns1 + "TarifResponse") 
         .Element(ns1 + "TarifResult") 
         .Element(ns1 + "BusinessData") 
         .Element(ns1 + "Proposition") 
         .Element(ns1 + "PropositionOutput") 
         .Element(ns1 + "Garantie") 
         .Element(ns1 + "GarantieOutput") 
         .Element(ns1 + "CotisationMensuelle"); 
+0

Я протестировал u 1-й код Спасибо, что это сработало, но у меня есть это сообщение «[System.InvalidCastException] = {« Невозможно наложить объект типа «System.String» на тип «System.Xml.XmlNode» '. "}", когда я помещаю данные в 'rpMyRepeater1.DataSource = urlList; rpMyRepeater1.DataBind(); '???? что не так в моем коде? – user3030806

+0

Можете ли вы обновить вопрос с помощью нового кода? – Damith

+0

изменить 'Label1.Text = urlList.ToString()' to 'Label1.Text = urlList.First()' – Damith

Смежные вопросы