2

名前空間の多い 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 Submitメッセージの応答です。

次の値を取得するにはどうすればよいですか。

TransactionID、StatusCode、StatusText、MessageID

Linq-Xml を試しましたが、クエリに "soapenv:Body" のような値が含まれているとうまくいきません。

4

3 に答える 3

3

もっと簡単な方法があります。{} 表記を使用して名前空間をインラインで指定するだけです。

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;
于 2009-08-12T11:14:54.187 に答える
3

名前空間でを構築しようとしている場合は、プラス文字列XNameから構築する必要があります。XNamespace

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

次に、 Linq-to-XML でXName" " を使用すると、ドキュメント内の要素bodyと一致します。<soapenv:Body>

名前空間を使用して他の要素の名前を作成できるようにするために、同様のことを行うことができます。

于 2009-08-12T11:07:25.043 に答える
0

XmlDocument (XML を読み取るため) と XmlNamespaceManager (名前空間データを取得するため) を使用し、それらのオブジェクトから XPath クエリを使用する必要があると思います。

于 2009-08-12T11:04:02.960 に答える