C#でSOAPを解析し、クエリ
-
13-09-2019 - |
質問
私は頻繁に名前空間SOAPメッセージを解析しようとしています(ソースはここをも見つけることができます):
<?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>
ただ、コンテキストのために、これはのMM7提出のメッセージの応答である。
どのように私は次の値を取得することができます:
TRANSACTIONID、のStatusCode、STATUSTEXT、メッセージID
私は、LINQの-XMLが、クエリは「soapenv:ボディ」のような値が含まれていない運を試してみました。
解決
あなたはXName
プラス文字列、例えばからそれを構築するために必要な名前空間でXNamespace
を構築しようとしている場合。
XNamespace soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
XName body = soapenv + "Body";
あなたはLINQのツーXMLでXName
「body
」を使用する場合、そして、それはあなたの文書に<soapenv:Body>
要素にマッチします。
あなたが名前空間を持つ他の要素の名前を構築できるように、同様のことを行うことができます。
他のヒント
さらに簡単な方法があります。あなたは、単に{}表記を使用して名前空間をインラインで指定することができます:
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;
私はあなたが(XMLを読み取るための)XmlDocumentオブジェクトを使用する必要がありますと思うてXmlNamespaceManager(名前空間データをretreiving用)およびそれらのオブジェクトからXPathクエリを使用します。
所属していません StackOverflow