Сохранение форматирования XML в HttpWebResponse в .NET - PullRequest
1 голос
/ 27 октября 2011

У меня есть проект .NET, который отправляет данные на сторонний веб-сервер в виде объекта SOAP через HTTP POST.Это делается с использованием объекта HttpWebRequest.Я получаю ответ от веб-сервера, который записываю с помощью объекта HttpWebResponse.Этот объект ответа также представляет собой XML, окруженный конвертом SOAP.

Проблема в том, что когда я беру ответ и выводю его на экран с помощью ToString, он, очевидно, сбрасывает все теги и просто объединяет всеодна строка.

Как вывести возвращенный XML с веб-сервера, не удаляя все форматирование / теги XML?

Вот код, который я использую:

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(uri);
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.Headers.Add("SOAPAction", "Some Headers");

byte[] postBytes = Encoding.ASCII.GetBytes(post_data);

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream();

requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
sResponse = new StreamReader(response.GetResponseStream()).ReadToEnd().ToString();

1 Ответ

0 голосов
/ 23 декабря 2011

Вы можете отформатировать xml в печатную форму следующим образом:

string xml = "<?xml version='1.0' encoding='UTF-8'?><foo><bar></bar></foo>";
XmlDocument document = new XmlDocument();
document.LoadXml(xml);

MemoryStream memStream = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(memStream, settings))
{
    document.Save(writer);
}
memStream.Flush();

string formattedXml = Encoding.UTF8.GetString(memStream.ToArray());

// strip UTF-8 BOM if required. Good for display purposes, can leave as such
// for normal processing.
string preAmble = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (formattedXml.StartsWith(preAmble)) 
{
    formattedXml = formattedXml.Remove(0, preAmble.Length);
    Console.WriteLine(formattedXml);
}

Выходы

<?xml version="1.0" encoding="utf-8"?>
<foo>
  <bar></bar>
</foo>

Надеюсь, это поможет.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...