は、関連する(C#の.NET)のコード:があるのはなぜWebサービスの応答XMLにエスケープ文字が含まれていて、その処理方法を教えてください。ここ
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<responseblock version=\"3.67\">\n <requestreference>X3909254</requestreference>\n <response type=\"ERROR\">\n <timestamp>2012-04-16 13:53:59</timestamp>\n <error>\n <message>Invalid field</message>\n <code>30000</code>\n <data>baseamount</data>\n </error>\n </response>\n</responseblock>\n"
:
WebRequest webRequest = System.Net.WebRequest.Create(authenticationUrl);
UTF8Encoding encoding = new UTF8Encoding();
...
var webResponse = webRequest.GetResponse();
var webResponseLength = webResponse.ContentLength;
byte[] responseBytes = new byte[webResponseLength];
webResponse.GetResponseStream().Read(responseBytes, 0, (int)webResponseLength);
var responseText = encoding.GetString(responseBytes);
webResponse.Close();
はここresponseText
の値が(上記のコードをデバッグ中のVisual Studioからコピーされたとして)次のようになります。一見エスケープ文字(例えば\"
)のレスポンスで?これは、レスポンスストリームを文字列に変換する方法によるものですか?代わりに何をすべきですか(変数responseText
に格納されている値を '標準' XMLとして解析できるように)
UPDATE - 私が使っていたいくつかのより多くのコード:
var resultXML = XElement.Parse(responseText);
...
int errorCode = (int)(resultXML.Element("error").Element("code"));
問題は要素error
は、error
を参照するので、私の明白な無力resultXML
のルート要素の直接の子ではないということでした(または子要素code
)。
あなたは正しいです!私の問題は、それ自体が関連するルート要素の直接の子ではなかった要素に直接アクセスしようとしていたことが判明しました。 P.S. - 私はまだウェブサービスについて幾分学んでいます。そして、私はいつも、もっと "原始的な"構造で作業するほうが好きです。しかし、Visual StudioでWeb参照を使用していることを思い出してくれてありがとう。私は以前にそれらを使用しており、彼らは非常に便利です! –
実際、Visual Studio 2008以降を実行している場合は、「Web参照の追加」ではなく「サービス参照の追加」を使用する必要があります。 –