2014-10-17 3 views
0

Я пытаюсь получить значение атрибута ResponseCode из этого XML.Получить значение Atttribute из XDocument

XML-это XDocument

<IDMResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="1" xmlns="http://www.fake.org/namespace/"> 
    <ARTSHeader> 
     <Response ResponseCode="Rejected"> 
      <RequestID>1</RequestID> 
      <BusinessError Severity="Error"> 
       <Code>IdmInvalidUserNamePasswordLoginProvided</Code> 
       <Description>Invalid username or password, if problem persists, please contact Administrator</Description> 
      </BusinessError> 
     </Response> 
    </ARTSHeader> 
</IDMResponse> 
+4

сделал U пытался что-нибудь –

ответ

0

с XPath: (нет проверки ошибок не сделано)

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); 
nsm.AddNamespace("def", "http://www.fake.org/namespace/"); 
XDocument doc = XDocument.Parse(xml); 
string code = 
    doc 
    .XPathSelectElement(@"/def:IDMResponse/def:ARTSHeader/def:Response", nsm) 
    .Attribute("ResponseCode") 
    .Value; 
+0

Работы удовольствие. Спасибо. – tonev

0
foreach (XElement el in doc.Root.Elements()) 
{ 
    if(el.Name.ToString() == "ARTSHeader") 
     foreach(XElement ell in el.Elements()) 
     { 
      if(ell.Name.ToString() == "Response") 
       string responseCode = ele.Attribute("ResponseCode").Value; 
     } 
} 

ли эта работа для вас? Я не знаю, всю структуру вашего XML, так что вы, возможно, придется углубиться в гнездовой XML, чтобы добраться до Response первого

0

Один из возможных способов:

..... 
XNamespace ns = "http://www.fake.org/namespace/"; 
string responseCode = (string)doc.Descendants(ns+"Response") 
           .First() 
           .Attribute("ResponseCode"); 
Console.WriteLine(responseCode); 
0

вы могли бы попробовать это, я убежищем `т испытания, так что вы, возможно, потребуется изменить некоторые структуры

XDocument doc1 = XDocument.Parse(soapResult); 
XNamespace ns1 = "http://www.fake.org/namespace/"; 
var items = doc1.Descendants(ns1 + "ARTSHeader").Descendants(ns1 + "Response").First().Attribute("ResponseCode").Descendants(ns1 + "BusinessError").First().Attribute("Severity") 
       .Select((x) => new 
       { 
        Code = x.Element(ns1 + "Code").Value, 
        Description = x.Element(ns1 + "Description").Value, 

       }); 
Смежные вопросы