2016-08-17 18 views
1

Я пытаюсь прочитать элемент APP_DATE в этом сообщении xml. Пробовал с помощью LINQ, но не в состоянии читать MyResultЧтение элемента из сообщения SOAP

<?xml version="1.0" encoding="utf-8" ?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<MyResponse xmlns="http://tempuri.org/"> 
<MyResult> 
    <APP_TYPE>I</APP_TYPE> 
    <APP_NO>152240</APP_NO> 
    <APP_DATE>10/03/2016</APP_DATE> 
    </MyResult> 
    </MyResponse> 
    </soap:Body> 
</soap:Envelope> 

ответ

1

не может быть уверен, потому что вы не предоставили какой-либо пример кода, но я предполагаю, что вы боретесь из-за пространств имен. Так что попробуйте это:

XmlDocument doc = new XmlDocument(); 
doc.Load("data.xml"); 
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable); 
ns.AddNamespace("soap", "http://www.w3.org/2003/05/soap-envelope"); 
ns.AddNamespace("x", "http://tempuri.org/"); 

var result = doc.SelectSingleNode("//soap:Envelope/soap:Body/x:MyResponse/x:MyResult/x:APP_DATE", ns).InnerText; 

Для более глубокого понимания вы можете прочитать this question

Использование Linq это будет выглядеть следующим образом:

var result = XDocument.Load("data.xml").Root 
         .Descendants(XName.Get("APP_DATE", "http://tempuri.org/")) 
         .FirstOrDefault()?.Value; 

Посмотрите, как в обоих примерах я должен указать пространства имен, что я ищу

+0

Что такое "?" делать в своем linq querry? – gismo

+1

@gismo - это синтаксический сахар C# 6.0 для 'x == null?/* default по типу x * /: x.Value'. Об этом можно узнать в [MSDN] (https://msdn.microsoft.com/en-us/magazine/dn802602.aspx) –

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