2016-09-17 3 views
0

У меня есть XML, который разобранный в XDocument:Extract тело ответ XDocument мыло в новый XDocument

<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> 
    <MyResponse xmlns="https://www.domain.net/"> 
     <Node1>0</Node1> 
    </MyResponse> 
    </soap:Body> 
</soap:Envelope> 

В принципе я пытаюсь создать новый XDocument, который имеет свой корень как

<MyResponse xmlns="https://www.domain.net/"> 
     <Node1>0</Node1> 
    </MyResponse> 

Так в сущности, я пытаюсь извлечь это из тела мыла. Я попытался разобрать это с помощью Linq, но не могу возвращать новый XDocument с этим новым корнем. Есть идеи?

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

+0

'новый XDocument (old.Element («{} http://schemas.xmlsoap.org/soap/envelope/ Envelope ") .Element (" {http://schemas.xmlsoap.org/soap/envelope/}Body ") .Element (" {https://www.domain.net/}MyResponse "))' – PetSerAl

ответ

-1

Я думаю, что это будет делать трюк:

using System; 
using System.Xml.Linq; 

namespace SO39545160 
{ 
    class Program 
    { 
    static string xmlSource = "<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>" + 
     "<MyResponse xmlns = \"https://www.domain.net/\" >" + 
     "<Node1 > 0 </Node1 >" + 
     "</MyResponse>" + 
     "</soap:Body>" + 
     "</soap:Envelope>"; 

    static void Main(string[] args) 
    { 
     XDocument xdoc = XDocument.Parse(xmlSource); 
     var subXml = xdoc.Document.Elements(XName.Get(@"{http://schemas.xmlsoap.org/soap/envelope/}Envelope")).Elements(XName.Get(@"{http://schemas.xmlsoap.org/soap/envelope/}Body")).Elements(XName.Get(@"{https://www.domain.net/}MyResponse")); 

     foreach (var node in subXml) 
     { 
     XDocument myRespDoc = new XDocument(node); 
     Console.WriteLine(myRespDoc); 
     } 
     Console.WriteLine(); 

     Console.WriteLine("END"); 
     Console.ReadLine(); 
    } 
    } 
} 
+0

возвращает ноль Результаты; – CR41G14

+0

@ CR41G14: Когда я запускаю его, он выводит на консоль в foreach-loop. Может быть, строка xmlSource была повреждена при ее копировании? –

+0

Это сработало var newDoc = XDocument (response.Document.Descendants (XName.Get («MyResponse», «https://www.domain.net/»))); Спасибо за руководство! – CR41G14

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