2

次のように、SOAP エンベロープで Web サービスからの応答があります。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
  <ProcessTranResponse xmlns="http://www.polaris.co.uk/XRTEService/2009/03/">
    <ProcessTranResult xmlns:a="http://schemas.datacontract.org/2004/07/XRTEService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <a:PrintFormFileNameContents i:nil="true"/>
      <a:ResponseXML>response_message</a:ResponseXML>
    </ProcessTranResult>
  </ProcessTranResponse>
</s:Body>

response_messageそして、文字列変数に到達したいと思います。やってみた

XDocument doc = XDocument.Parse(Response);
XNamespace xmlnsa = "http://schemas.datacontract.org/2004/07/XRTEService";
var ResponseXML = doc.Descendants(xmlnsa + "ResponseXML");

そして、watch を使用すると に表示されResponseXML -> Results View[0] -> Valueますresponse_messageが、C# から Value に到達するための次のステップがわかりません。

4

2 に答える 2

2

XContainer.Descendants要素のコレクションを返します。次に、次のようなことを試してください。

foreach (XElement el in ResponseXML)
{
    Console.WriteLine(el.Value);
}

または、応答が常に 1 つしかないことがわかっている場合は、次のようにすることもできます。

XDocument doc = XDocument.Parse(Response);

XNamespace xmlnsa = "http://schemas.datacontract.org/2004/07/XRTEService";

XElement ResponseXML = (from xml in XMLDoc.Descendants(xmlnsa + "ResponseXML")
                        select xml).FirstOrDefault();

string ResponseAsString = ResponseXML.Value;
于 2012-10-10T11:38:26.157 に答える
1

xml コンテンツの構造を導入するかどうかに関係なく、目的に合わせていくつかのソリューションを採用できます。

静的な姿勢

これを簡単に使用できます:

XmlDocument _doc = new XmlDocument();
doc.LoadXml(_stream.ReadToEnd());

次に、次のような方法で目的のデータを見つけます。

doc.LastChild.FirstChild.FirstChild.LastChild.InnerText;

xml 構造の読み取り

extracting-data-from-a-complex-xml-with-linq を参照して、名前空間やその他の xml コンテンツを導入する追加のコード行を記述して、利用可能なデータを検索/マップすることができます。

于 2015-05-30T09:25:13.907 に答える