Frage

Ich versuche, eine stark Namespace SOAP-Nachricht zu analysieren (Quelle kann auch hier werden):

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Header>
  <ns1:TransactionID soapenv:mustUnderstand="1" xsi:type="xsd:string" xmlns:ns1="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2">0a00f556419041c08d8479fbaad02a3c</ns1:TransactionID>
 </soapenv:Header>
 <soapenv:Body>
  <SubmitRsp xmlns="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2">
   <MM7Version>5.3.0</MM7Version>
   <Status>
    <StatusCode xsi:type="ns2:responseStatusType_StatusCode" xmlns:ns2="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2" xmlns="">1000</StatusCode>
    <StatusText xsi:type="ns3:statusTextType" xmlns:ns3="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2" xmlns="">Success</StatusText>
   </Status>
   <MessageID>B08CF7B847DAD89C752334BDEBB69B5B</MessageID>
  </SubmitRsp>
 </soapenv:Body>
</soapenv:Envelope>

Nur für den Kontext, ist dies eine Antwort von MM7 Senden Nachricht.

Wie kann ich die folgenden Werte erhalten:

TransactionID, Statuscode, Statustext, MessageID

Ich habe versucht, Linq-Xml aber kein Glück, wenn die Abfrage einen Wert wie enthält "soapenv: Body"

.
War es hilfreich?

Lösung

Wenn Sie versuchen, eine XName mit einem Namespace Sie es von einem XNamespace sowie eine Zeichenfolge aufbauen müssen zu bauen, z.

XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
XName body = soapenv + "Body";

Wenn Sie dann das XName "body" mit Linq-to-XML verwenden, wird es das <soapenv:Body> Element in Ihrem Dokument entspricht.

Sie können ähnliche Dinge tun, bauen die Namen anderer Elemente mit Namensräumen zu ermöglichen.

Andere Tipps

Es gibt eine noch einfachere Art und Weise. Sie können einfach den Namespace inline angeben mit {} Notation:

var soap = XElement.Load(soapPath);
var transactionID = 
        from e in soap.Descendants("{http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2}TransactionID")
        select e.Value;

Ich glaube, Sie müssen XmlDocument verwenden (für das Lesen von XML) und XmlNamespaceManager (für retreiving die Namespace-Daten) und unter Verwendung von XPath-Abfragen aus diesen Objekten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top